2013-05-02 236 views
0

我有一個WPF用戶控件,它具有名爲IsMultiSelect的DependencyProperty。我想在UserControl xaml中隱藏一個按鈕。綁定到UserControl的依賴項屬性

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

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

我該如何解決這個錯誤?

回答

2

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

一個解決辦法是通過設置RelativeSource這樣找到它:

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

這就是我一直在尋找。這工作完美。謝謝。使用ElementName也可以。

-1

不是綁定到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中。