English 中文(简体)
为什么.Net WPF DependencyProperty必须是类的静态成员
原标题:
  • 时间:2008-08-31 08:08:35
  •  标签:

现在正在学习WPF。今天发现了.Net依赖项财产的新功能。他们带来的是

  • Support for Callbacks (Validation, Change, etc)
  • Property inheritance
  • Attached properties

在其他中。

但我的问题是,为什么它们需要在包含类中声明为静态?建议的方法是为它们添加实例包装器属性。为什么?

edit: @Matt, but doesn t that also mandate that the property value is also shared across instances - unless of course it is a derived value ?

最佳回答

我认为这一要求背后有两个原因:

  1. You can t register same DP twice. To comply with this constraint you should use static variable, it will be initialized only one time thus you will register DP one time only.
  2. DP should be registered before any class (which uses that DB) instance created
问题回答

依赖项财产是静态的,因为WPF中有一个关键优化:WPF中的许多控件都有几十个甚至数百个财产。这些类中的大多数财产都设置为默认值。如果DP是实例财产,则需要为您创建的每个对象中的每个属性分配内存。由于DP是静态的,WPF可以更有效地管理每个属性的内存使用情况。

您应该为注册的任何DP提供默认值的原因是,当您的属性设置为默认值时,无论您创建了多少包含该属性的对象,WPF都会注意不要为其分配额外的内存。

我认为您需要依赖属性的静态实例的原因实际上只是因为它们是这样设计的。静态位保存所有的属性元数据——它的默认值、所有者类型(如果是附加属性,则很方便)等,以及当它更改时的回调方法——诸如此类。将这些东西静态存储在类的所有实例中而不是每个实例中是有意义的。





相关问题
热门标签