在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将保持可见或不依赖于第一个值。
我该如何正确地做到这一点?感谢。
答案 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。