MainWindow上的复选框,用于为位于基础用户控件上的控件设置值

时间:2013-01-12 01:02:16

标签: wpf mvvm binding checkbox mainwindow

在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将保持可见或不依赖于第一个值。

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

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

如果您的绑定是正确的。您只需要确保您的代码类在binded类中实现INotifyPropertyChanged接口以进行查看,并且您在每个复选框状态更改时都会引发RaisePropertyChanged事件。有关详细信息,请查看示例here