为什么这么多wpf控件实现CLR属性而不是依赖属性?

时间:2010-04-03 17:45:16

标签: wpf controls dependency-properties

是因为控制程序员是懒惰的,难以实现或不了解?

它们是来自第三方供应商或Microsoft本身的自定义控件,非常多的控件通常具有clr属性而不是DP。结果是我无法绑定到它们并且wpf不是所有关于绑定? :/

我的下一个问题是,为什么这么多wpf控件提供可视化部分,但它们不是可视树的成员?请参阅wpf datagrid列,标题...

您怎么看?

1 个答案:

答案 0 :(得分:4)

您没有提供您正在考虑的控件的示例,即使这样,也很难找到设计和实现它们的人的动机,但这里有一些想法:

  1. 某些WPF和Silverlight控件套件是已建立的Windows窗体套件的端口。在这些情况下,设计人员经常执行最小端口,因此最终会得到与他们移植的WinForms代码相同的过程,非绑定导向编程模型。我记得像这样评估一个Silverlight图表套件 - 主要样本看起来完全像WinForms代码,而不是视线中的绑定。
  2. 令人惊讶的WPF程序员似乎并没有“得到”WPF“完全关于绑定”(以及样式和模板;通常,WPF是声明性的而不是命令性的)。看看Stack Overflow上有关如何在WPF中强制执行某些操作的问题,当惯用解决方案是以声明方式执行时。
  3. 有时设计师可能会认为特定属性对于绑定目标来说根本没用或者是不可取的,例如因为控件需要使用该属性进行魔术内部操作,或者因为设计人员无法设想任何场景其中属性需要数据绑定。
  4. 有时DP成语与CLR属性成语相矛盾。例如,CLR集合属性通常是只读的(并通过Add,Remove和Clear方法进行操作) - FxCop甚至有一个规则。但是为了可绑定,集合DP必须是可读写的。在这种情况下,控件设计者(尤其是对FxCop过分信任的人)可能会发现自己在使用CLR习语,特别是当他们无法想到绑定场景时(“为什么有人需要绑定GridView)。专栏收藏?“)。
  5. 但这都是猜测和普遍性:如果你想要一个明确的答案,你真的需要选择具体的例子并询问这些控制的支持论坛。