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

标签 wpf controls dependency-properties

是因为控件程序员太懒、太难实现还是知识不够?

无论是来自第 3 方供应商的自定义控件还是 Microsoft 本身,很多控件通常具有 clr 属性而不是 DP。结果是我无法绑定(bind)到它们,wpf 不就是绑定(bind)吗? :/

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

你觉得怎么样?

最佳答案

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

  1. 某些 WPF 和 Silverlight 控制套件是从已建立的 Windows 窗体套件移植而来的。在这些情况下,设计人员通常会执行最小的移植,因此最终会得到与他们移植的 WinForms 代码相同的过程性、面向非绑定(bind)的编程模型。我记得像这样评估 Silverlight 图表套件 - 主要示例看起来与 WinForms 代码一模一样,而不是可见的绑定(bind)。
  2. 数量惊人的 WPF 程序员似乎并没有“理解”WPF“全部都是关于绑定(bind)”(以及样式和模板;通常,WPF 是声明性的而不是命令性的)。看看 Stack Overflow 上有多少问题询问如何在 WPF 中强制执行操作,而惯用的解决方案是声明式执行操作。
  3. 有时,设计者可能认为将特定属性作为绑定(bind)目标根本没有用或不合适,例如因为控件需要使用该属性执行神奇的内部操作,或者因为设计者无法设想任何场景其中属性需要进行数据绑定(bind)。
  4. 有时 DP 习惯用法与 CLR 属性习惯用法相矛盾。例如,CLR 集合属性通常是只读的(并且通过 Add、Remove 和 Clear 方法进行操作)——FxCop 甚至对此有一个规则。但为了可绑定(bind),集合 DP 必须是读写的。在这种情况下,控件设计者(尤其是对 FxCop 过于信任的设计者)可能会发现自己在用 CLR 惯用法进行思考,尤其是当他们无法想到绑定(bind)场景时(“为什么有人需要绑定(bind) GridView.列集合?”)。

但这都是猜测和笼统:如果您想要一个明确的答案,您确实需要选择具体的示例并在这些控件的支持论坛上询问。

关于wpf - 为什么这么多 wpf 控件实现 CLR 属性而不是依赖属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572101/

相关文章:

WPF 和 ClickOnce

c - 警告 : control may reach end of non-void function [-Wreturn-type]

asp.net - 动态创建 ASP.NET 表单控件

c++ - 按钮点击的低延迟捕获

c# - 如何在 WPF 应用程序中引用根目录?

wpf - 使用模型优先方法时是否可以缓存 View ?

c# - 来自列表的 WPF Listview 数据绑定(bind)

wpf - ViewModel 如何在需要时从 View 中请求数据?

c# - 派生类型是否也成为基类中定义的依赖属性的所有者(在 WPF/XAML 中)