c# - 如何将数据绑定(bind)到控件的 Visibility 属性

标签 c# wpf data-binding visibility

我知道控件的 Visibility 属性不能像其他属性那样绑定(bind)到数据。它需要某种转换器(?)。在尝试实现来自 this question 的解决方案时我遇到了一个编译器错误:The resource "BoolToVisible"could not be resolved。我猜我必须创建一个名为 BoolToVisibleResourceKey,我只是不知道如何做。

我请求有人告诉我绑定(bind)到控件的 Visibility 属性的正确方法。

*我将其添加到的控件是一个单选按钮。 * 我的数据模型中的 isVisible 有一个 bool 属性,它将绑定(bind)到这个单选按钮。

数据模型属性:

private bool _isVisible = true;

public bool IsVisible
{
       get { return _isVisible; }
       set
       {
           _isVisible = value;
           NotifyPropertyChange(() => IsVisible);
       }
}

XAML:

<RadioButton Visibility="{Binding DataModel.IsVisible,Converter={StaticResource ResourceKey=BoolToVisible},RelativeSource={RelativeSource TemplatedParent}}" ... />

谢谢。

最佳答案

2 个例子:

第一个使用问题中所述的转换器:

  public class BooleanToVisibilityConverter : IValueConverter 
  {
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     {            
         if (value == null || !(value is bool)) 
             return Binding.DoNothing;

         return (bool)value ? Visibility.Visible : Visibility.Collapsed; 
     }

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     {
         return value;
     }
 }

在 xaml 中:

<Window x:Class="Stackoverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:local="clr-namespace:Stackoverflow"
    >
<Window.Resources>
    <local:BooleanToVisibilityConverter x:Key="booleanToVisibiltyConverter"/>
</Window.Resources>

<Grid>
    <Button Visibility="{Binding IsSomeThing,Converter={StaticResource booleanToVisibiltyConverter}}"/>        
</Grid>

第二个:

在您的 DataContext 中,您可以直接拥有一个可见性属性

CS:

    private Visibility _myControlVisibility;
    public Visibility MyControlVisibility
    {
        get { return _myControlVisibility; }
        set { _myControlVisibility = value; }
    }

xaml:

    <Button Visibility="{Binding MyControlVisibility}"/>        

关于c# - 如何将数据绑定(bind)到控件的 Visibility 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19058879/

相关文章:

c# - 使用 Mutex 来防止同一程序的多个实例安全运行吗?

c# - 获取快照会减慢 UI - 需要线程吗?

database-design - 何时进行计算

c# - 将列表框绑定(bind)到 WPF 中字符串类型的 Observable 集合

c# - 具有网格布局的自定义 ItemsControl

c# - 为任务创建 lambda 表达式<string>

C#:如何在对象类型转换期间使用隐式强制转换运算符?

c# - WPF 动画结束时是否会触发任何事件?

c# - ObjectContext 实例已被处置,不能再使用

WPF 网络浏览器在 Adob​​e 阅读器窗口中打开 PDF 文件