[英]Binding to Variable and Converter in Code
我試圖使ListBoxItem
僅在bool isInEditMode
為true時出現。 這是我的變量:
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));
這是我添加ListBoxItem
:
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}" />
您的Binding
構造是錯誤的。 Source
是對象,即綁定操作的數據源。 Path
(通過ctor參數設置)是數據源中數據屬性的路徑。
因此, Binding
應如下所示:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.