0

在 MainWindow 类中,我有一个复选框,用于控制 UserControls 中的许多对象(如网格、列表视图等)使用的属性

    <CheckBox Content="Show objects ID" Name="showID" IsChecked="False" />

比定义的属性,

    public Visibility ShowObjectIDasVisibility
    {
        get { return showID.IsChecked.Equals(true) ? Visibility.Visible : Visibility.Collapsed; }
    }

我有更多这样的返回布尔值,宽度取决于目标控件应该使用的内容。

我设法绑定位于 UserControl 对象中的控件以使用此属性,如下所示:

<TextBlock Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ShowObjectIDasVisibility}" />

但它仅适用于创建此 TextBlock 时,我可以根据需要多次切换复选框,并且 TextBlock 将根据第一个值保持可见或不可见。

我应该如何正确地做到这一点?谢谢。

4

2 回答 2

1

INotifyPropertyChanged您可以使用以下接口代替接口DependencyProperty

public Visibility ShowObjectIDasVisibility
    {
        get { return (Visibility)GetValue(ShowObjectIDasVisibilityProperty); }
        set { SetValue(ShowObjectIDasVisibilityProperty, value); }
    }
    public static readonly DependencyProperty ShowObjectIDasVisibilityProperty =
        DependencyProperty.Register("ShowObjectIDasVisibility", typeof(Visibility), typeof(MainWindow), new PropertyMetadata(Visibility.Collapsed));

现在,要显示/隐藏您TextBlock需要更改ShowObjectIDasVisibility值。

例如,您可以通过添加到复选框Click="OnShowID_Click和后面的代码来做到这一点

private void OnShowID_Click(object sender, RoutedEventArgs e)
    {
        ShowObjectIDasVisibility = ShowObjectIDasVisibility == System.Windows.Visibility.Visible ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
    }
于 2013-01-12T19:15:03.430 回答
0

如果您的绑定是正确的。您只需要确保您的代码类在绑定到视图的类中实现 INotifyPropertyChanged 接口,并且您在每个复选框状态更改时引发 RaisePropertyChanged 事件。有关更多详细信息,请参见此处的示例。

于 2013-01-12T06:31:08.060 回答