DependencyProperty.Register() 用法?

Posted

技术标签:

【中文标题】DependencyProperty.Register() 用法?【英文标题】:DependencyProperty.Register() usage? 【发布时间】:2010-08-02 14:33:35 【问题描述】:

我有 2 个控件 A 和 B 需要共享一个依赖属性。

A 的属性定义为:

public static readonly DependencyProperty PathProperty= DependencyProperty.Register("PathProperty", typeof(string), typeof(A), 新的 PropertyMetadata(string.Empty, OnPathChanged));

    public string Path
    
        get  return (string)GetValue(PathProperty); 
        private set  SetValue(PathProperty, value); 
    

    private static void OnPathChanged(DependencyObject dobj, DependencyPropertyChangedEventArgs args)
    
       //Dos something
    

B 类内部, 我有

public static readonly DependencyProperty Path = A.PathProperty.AddOwner(typeof(B));

    public string Path
    
        get  return (string)GetValue(Path); 
        set  SetValue(Path, value); 
         

现在,如果我在 B 上明确设置依赖属性 Path ...(来自 Binstance.Path = "value" 之类的代码) 我希望 OnPathChanged 方法在 A 控件内部触发?

这不是预期的行为还是我错过了什么?我怎样才能让它工作? ...即更改 B 上的路径属性应在 A 上触发 OnPAthChanged

谢谢!

【问题讨论】:

【参考方案1】:

我认为您误解了 DependencyProperties 的概念...两个单独的控件不会接收彼此事件的更新 - 两个 Dependency 派生对象也不会接收其他对象更改的通知(例如,如果您有两个文本框 -改变一个人的 TextProperty,对另一个人没有任何作用)。如果您真的希望您的第二个 Control 类型触发静态验证回调 - 您需要将其公开并在 B 类上的 DependencyProperty 注册中调用它。不过我不推荐它 - 它使您之间的耦合非常紧密否则没有共同点的两个类(据我了解您的示例)。

【讨论】:

以上是关于DependencyProperty.Register() 用法?的主要内容,如果未能解决你的问题,请参考以下文章