如果附加财产发生变化,是否可以通知“父母”?

时间:2011-10-05 07:55:04

标签: c# wpf graphics

如果附加属性发生变化,是否可以通知“父母”?

我对WPF问题感到困扰。我有一个类,“ContainerVisual”,(实际上是一个visual3D,但应该是无关紧要的),它定义了一个附加属性“IsChildVisible”。在XAML中,我然后使用这个视觉效果并添加一些孩子。每个子节点都使用附加属性,并将其值绑定到视图模型中的属性。当视图模型中的属性从true变为false时,子项应该消失,如果它变回true,则子项应该重新出现。

为了实现这一点,我在ContainerVisual中有逻辑来处理这个问题。然后我在依赖属性上监听已更改的事件,如下所示:

public static readonly DependencyProperty IsChildVisibleProperty = 
    DependencyProperty.RegisterAttached("IsChildVisible", typeof(bool),
    typeof(ContainerVisual), new UIPropertyMetadata(true, IsChildVisiblePropertyChanged));

private static void IsChildVisiblePropertyChanged(DependencyObject d, 
    DependencyPropertyChangedEventArgs e) {}

到目前为止一切顺利。我的问题只是发件人,事件附带的DependencyObject,是孩子,而不是父母。通常这不是一个大问题,因为您可以使用树辅助类来获取父级,但这要求视觉首先位于可视/逻辑树中。如果值从false更改为true,我需要通知“父”将对象放回树中。当然,对象此时没有父级,所以要找到它会很难......

所以我的问题是: 是否可以在定义附加属性的类的实例中获取通知(在我的情况下是ContainerVisual类的实例),如果对象使用附加属性(子)更改属性的值?

如果这是不可能的,我是否有办法隐藏视觉儿童而不将其从视觉和/或逻辑树中删除?

编辑: 如果它有帮助,我已经存储了所有潜在孩子的参考。我只需要在我的ContainerVisual实例中调用一个无参数的公共方法......

1 个答案:

答案 0 :(得分:3)

如果您具有对所有潜在子项的引用,则可以使用DependencyPropertyDescriptor

退房 Attached Property Changed Event?

希望它有所帮助。