0

我有一个 WPF 用户控件,它有一个名为 IsMultiSelect 的 DependencyProperty。我想在 UserControl xaml 中显示隐藏按钮。

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

此用户控件具有分配给 DataContext 的 ViewModel。由于视图模型中不存在该属性,上述语法给了我一个绑定错误。

我该如何解决这个错误?

4

2 回答 2

3

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

一种解决方案是通过设置RelativeSource这样的来找到它:

<Button Visibility="{Binding IsMultiSelect, 
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
    Converter=....}" />
于 2013-05-02T18:42:39.410 回答
-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 中。

于 2013-05-02T18:25:18.047 回答