我有一個WPF用戶控件,它具有名爲IsMultiSelect的DependencyProperty。我想在UserControl xaml中隱藏一個按鈕。綁定到UserControl的依賴項屬性
<Button Visibility="{Binding IsMultiSelect, Converter=....}" />
此用戶控件具有分配給DataContext的ViewModel。 由於視圖模型中不存在屬性,上面的語法給了我一個綁定錯誤。
我該如何解決這個錯誤?
我有一個WPF用戶控件,它具有名爲IsMultiSelect的DependencyProperty。我想在UserControl xaml中隱藏一個按鈕。綁定到UserControl的依賴項屬性
<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中。
這就是我一直在尋找。這工作完美。謝謝。使用ElementName也可以。