簡體   English   中英

在代碼中綁定到變量和轉換器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM