簡體   English   中英

綁定到UserControl的依賴屬性

[英]Binding to a Dependency Property of UserControl

我有一個WPF用戶控件,它有一個名為IsMultiSelect的DependencyProperty。 我想在UserControl xaml中隱藏一個Button。

<Button Visibility="{Binding IsMultiSelect, Converter=....}" />

此用戶控件具有分配給DataContext的ViewModel。 由於視圖模型中不存在屬性,上面的語法給出了綁定錯誤。

我該如何解決這個錯誤?

您可以在綁定中以不同方式定位UserControl

一種解決方案是通過設置這樣的RelativeSource來找到它:

<Button Visibility="{Binding IsMultiSelect, 
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
    Converter=....}" />

而不是從xaml綁定到屬性,屬性更改依賴項屬性的處理程序應該更改按鈕的可見性。

public static readonly DependencyProperty IsMultiSelectProperty = DependencyProperty.Register("IsMultiSelect", typeof(bool), typeof(MyUserControl), new PropertyMetadata(false, OnIsMultiSelectPropertyChanged));

private static void OnIsMultiSelectPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
    (sender as MyUserControl).OnIsMultiSelectPropertyChanged(e);
}

private void OnIsMultiSelectPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    MyButton.Visibility = (bool)e.NewValue ? Visibility.Visible : Visibility.Collapsed;
}

public bool IsMultiSelect
{
    get { return (bool)GetValue(IsMultiSelectProperty); }
    set { SetValue(IsMultiSelectProperty, value); }
}

您也可以將轉換器邏輯放在OnIsMultiSelectPropertyChanged中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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