【问题标题】:Detect subproperty change in PropertyChangedCallback and get the subproperty检测 PropertyChangedCallback 中的子属性变化并获取子属性
【发布时间】:2013-12-18 20:29:20
【问题描述】:

我将DepdendencyObjects 与PropertyChangedCallbacks 一起使用,我想检测此回调中的子属性更改。问题是 DependencyPropertyChangedEventArgs-Object 只让我看到包含 DP 的属性,其中包含已更改的属性。有什么方法可以到达这个子属性?

class MainClass : DepencencyObject
{
    public ComplexObject MainProperty
    {
        get { return (ComplexObject)GetValue(MainPropertyProperty); }
        set { SetValue(MainPropertyProperty, value); }
    }

    public static readonly DependencyProperty MainPropertyProperty =
        DependencyProperty.Register("MainProperty", 
        typeof(ComplexObject), typeof(MainClass), 
        new PropertyMetadata(new ComplexObject([...])));

    private static void MainProperty_PropertyChangedCallback(... DependencyPropertyChangedEventArgs e)
    {
        // Unable to detect a change, if 'ComplexObject.SubProperty'
        // changes; it is shown like a change of 'MainProperty'
    }
}

class ComplexObject : DepencencyObject
{
    public int SubProperty
    {
        get { return (int)GetValue(SubPropertyProperty); }
        set { SetValue(SubPropertyProperty, value); }
    }

    public static readonly DependencyProperty SubPropertyProperty =
        DependencyProperty.Register("SubProperty", 
        typeof(int), typeof(ComplexObject), 
        new PropertyMetadata(0));
}

有人这样做

(new MainClass()).MainProperty.SubProperty = 100000;

并且调用 PropertyChangedCallback 是因为 MainPropertychanged(不是 SubProperty)。

【问题讨论】:

  • 您需要更多代码,以便我们提供帮助
  • 我添加了一些代码
  • 您的绑定将正确监听 sub 属性。我猜你没有使用绑定来监听这个变化?
  • 值来自哪里并不重要。
  • 您需要订阅 MainProperty 中子属性的更改并将其冒泡给调用者。

标签: c# wpf dependency-properties dependencyobject


【解决方案1】:

Freezable 派生您的ComplexObject(并实现Freezable)应该足够了吗?

根据 MSDN 文档:

派生自 Freezable 的类具有以下特性:

  • 特殊状态:只读(冻结)状态和可写状态。
  • 线程安全:冻结的 Freezable 对象可以跨线程共享。
  • 详细的更改通知:与其他 DependencyObject 对象不同,Freezable 对象在子属性值更改时提供更改通知。
  • 轻松克隆:Freezable 类已经实现了几种产生深度克隆的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多