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
仅在bool
isInEditMode
为真时显示。这是我的变量:

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有问题,它没有绑定。。。