Wpf 主窗口中的复选框,用于设置位于参考底图UserControls上的控件的值

Wpf 主窗口中的复选框,用于设置位于参考底图UserControls上的控件的值,wpf,mvvm,binding,checkbox,mainwindow,Wpf,Mvvm,Binding,Checkbox,Mainwindow,在MainWindow类中,我有一个复选框,用于控制UserControls中许多对象(如网格、ListView等)使用的属性 <CheckBox Content="Show objects ID" Name="showID" IsChecked="False" /> 我有一些类似的方法来返回布尔值,宽度取决于目标控件上应该使用什么 我设法绑定位于UserControl对象中的控件以使用此属性,如下所示: <TextBlock Visibility="{Binding

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

    <CheckBox Content="Show objects ID" Name="showID" IsChecked="False" />
我有一些类似的方法来返回布尔值,宽度取决于目标控件上应该使用什么

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

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

但在创建这个文本块时,它只对一个复选框起作用,我可以随意多次切换复选框,并且文本块将保持可见或不可见,这取决于第一个值


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

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

您可以使用
DependencyProperty
而不是
INotifyPropertyChanged
界面:

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
,您需要更改
showObjectisVisibility

例如,您可以通过添加到复选框
Click=“OnShowID\u Click
和代码隐藏中来完成此操作

private void OnShowID_Click(object sender, RoutedEventArgs e)
    {
        ShowObjectIDasVisibility = ShowObjectIDasVisibility == System.Windows.Visibility.Visible ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
    }
private void OnShowID_Click(object sender, RoutedEventArgs e)
    {
        ShowObjectIDasVisibility = ShowObjectIDasVisibility == System.Windows.Visibility.Visible ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
    }