2013-05-02 187 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中。