我有一个WPF用户控件,它有一个名为IsMultiSelect的DependencyProperty。我想在UserControl xaml中显示隐藏按钮。
<Button Visibility="{Binding IsMultiSelect, Converter=....}" />
此用户控件具有分配给DataContext的ViewModel。 由于视图模型中不存在属性,上面的语法给出了绑定错误。
如何修复此错误?
答案 0 :(得分:3)
您可以在绑定中以不同方式定位UserControl
。
一种解决方案是通过设置RelativeSource
来找到它:
<Button Visibility="{Binding IsMultiSelect,
RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Converter=....}" />
答案 1 :(得分:-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中。