一个ownerType不是DependencyObject的DependencyProperty有什么用处?

7

我刚开始接触 WPF 中的 DependencyProperties,想在学习过程中检查一些想法。

假设有以下代码(暂时忽略命名约定):

class MyTestClass
{
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}

我发现dp2抛出了一个TypeInitializationException异常,其中包含“'MyTestClass'类型必须派生自DependencyObject”的消息,这是我预期的,但是dp1却被接受得非常愉快。
现在,我明白为什么dp2会引发异常,因为我试图在一个不是DependencyObject的类型上注册属性元数据,这是可以理解的。我已经查看了代码路径,可以看到dp1和dp2都遵循的代码路径,所以从代码角度来看,我可以理解为什么dp1不会引发异常,但是从概念上讲,我希望dp1和dp2都会引发相同的异常。
我的问题是创建一个像dp1这样ownerType不是DependencyObject的DependencyProperty有什么用处,因为我看不出它如何在没有DependencyObject上的GetValue/SetValue方法的情况下使用。
1个回答

3
编辑
第一个Register-Signature的原因是注册一个没有默认值的DependencyProperty,该属性不能被Clear方法恢复并且没有已注册的值更改回调函数。
由于没有默认值,所以不会检查默认值是否有效,因此不会抛出异常。但是这种注册没有用处,你将无法从中受益,它不会抛出异常并不意味着它对某些事情有好处 - 它只是不会出错而已。

嗨,谢谢你的回复。我明白为什么ownerType可以设置为任何对象并在运行时执行检查。然而,我的问题实际上是,为什么以下代码不会抛出运行时异常,因此以这种方式创建DependencyProperty有什么用处: DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass)); - Matt__E_
@Matt__E_:抱歉,我应该更仔细地阅读问题。我已经修改了我的答案。顺便说一句,这个问题很棒,点赞! - HCL
1
嗨HCL。非常感谢您抽出时间阅读我的评论并再次回复。我非常感激。我想不到在那种方式下注册dp1有任何有用的目的,但由于它没有抛出异常,我认为它必须有一个我不知道的目的。感谢您确认它没有任何有用的作用。 - Matt__E_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接