C# 绑定到代码中的变量和转换器
我试图使C# 绑定到代码中的变量和转换器,c#,wpf,binding,C#,Wpf,Binding,我试图使ListBoxItem仅在boolisInEditMode为真时显示。这是我的变量: private bool isInEditMode { get { return Convert.ToBoolean(GetValue(IsInEditMode_Property)); } set { SetValue(IsInEditMode_Property, value); } } public static readonly DependencyProperty IsInEdi
ListBoxItem
仅在boolisInEditMode
为真时显示。这是我的变量:
private bool isInEditMode
{
get { return Convert.ToBoolean(GetValue(IsInEditMode_Property)); }
set { SetValue(IsInEditMode_Property, value); }
}
public static readonly DependencyProperty IsInEditMode_Property = DependencyProperty.Register("isInEditMode", typeof(bool), typeof(MainWindow), new PropertyMetadata(null));
这是我添加列表框项目的地方
:
SurfaceListBoxItem slbi = new SurfaceListBoxItem();
Binding visibilityBinding = new Binding("Visibility");
visibilityBinding.Source = isInEditMode;
visibilityBinding.Converter = new BoolToVisibility();
visibilityBinding.NotifyOnTargetUpdated = true;
slbi.SetBinding(SurfaceListBoxItem.VisibilityProperty, visibilityBinding);
myListBox.Items.Add(slbi);
但是,当isInEditMode更改时,转换器未触发。出了什么问题?这是我的转换器顺便说一句,非常直截了当:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToBoolean(value) == true)
return System.Windows.Visibility.Visible;
else
return System.Windows.Visibility.Collapsed;
}
我在XAML中做了一个快速测试,但效果很好:
<Grid Visibility="{Binding Path=isInEditMode, ElementName=myMainWindow, Converter={StaticResource BoolToVisibility}, NotifyOnTargetUpdated=True}" />
您对
绑定的构造是错误的Source
是对象,即绑定操作的数据源<代码>路径(通过ctor参数设置)是数据源中数据属性的路径
因此,绑定
应该如下所示:
var visibilityBinding = new Binding("isInEditMode");
visibilityBinding.Source = this;
visibilityBinding.Converter = new BoolToVisibility();
visibilityBinding.NotifyOnTargetUpdated = true;
// here you setting the target property - VisibilityProperty
slbi.SetBinding(SurfaceListBoxItem.VisibilityProperty, visibilityBinding);
有现成的BooleanToVisibilityConverter
:感谢您提供的信息!我已经改变了,但仍然不起作用。。。我怀疑visibilityBinding.Source=isInEditMode有问题代码>,它没有绑定。。。