非静态依赖项属性

时间:2010-09-07 16:40:21

标签: wpf

我有没有理由(或者不应该)将依赖属性声明为非静态?

我需要创建一个具有双向可绑定属性的接口。 INotifyPropertyChanged在接收端看起来有点麻烦,因为它依赖于字符串标识符。

2 个答案:

答案 0 :(得分:11)

  

我有没有理由(或者不应该)将依赖属性声明为非静态?

WPF中的依赖项属性机制使用每种类型指定的存储机制,而不是每个实例。 DP的设计依赖于静态定义,而不是每个实例。如果在实例上定义它们,它们将无法正常工作。

这部分是为了允许继承属性,但也允许你在对象上指定很多属性而不需要为每个实例使用大量内存。

如果要创建具有双向可绑定属性的接口,通常需要为类使用INotifyPropertyChanged,并在用户界面元素上使用依赖项属性来处理绑定。 INotifyPropertyChanged是适当的机制。如果主要投诉是字符串标识符,您可以work around them using expression trees

答案 1 :(得分:1)

DependencyProperty字段本身需要声明为static,包含GetValue / SetValue调用的包装器属性不是。

依赖项属性内置了更改通知,因此您无需执行任何额外操作即可。要使您的属性上的Bindings默认为Mode = TwoWay,请将FrameworkPropertyMetadata传递给Register方法,并在选项中使用FrameworkPropertyMetadataOptions.BindsToWayByDefault标志。