【发布时间】:2010-07-31 07:09:25
【问题描述】:
我了解依赖项属性在 WPF 中发挥着重要作用。但是,我不明白绑定中目标属性必须是依赖属性的限制背后的原因。为什么不能是任何财产?
【问题讨论】:
我了解依赖项属性在 WPF 中发挥着重要作用。但是,我不明白绑定中目标属性必须是依赖属性的限制背后的原因。为什么不能是任何财产?
【问题讨论】:
如果你有兴趣,可以打开Reflector,看一下框架中一些依赖属性和绑定系统相关的代码。有很多棘手的事情正在发生,以允许对属性路径进行稳健、高性能的解析,并将更改传播到依赖属性。拥有标准基础架构还允许管理更复杂的用例,例如从多个来源更新依赖属性并解决优先级。例如,在为通过样式设置其默认值的属性设置动画时经常出现这种情况。
依赖属性的另一个好处是它们在内部封装了很多行为(例如通知、验证和强制),这意味着如果您看到依赖属性,您就知道肯定会支持某些行为。这与 INotifyPropertyChanged 形成对比,在 INotifyPropertyChanged 中,类实现者可能支持也可能不支持所宣传的接口。这意味着类开发人员的工作量会减少。
【讨论】:
在 google 中使用 DependencyProperty 进行简单搜索会产生一些结果,您可能会发现这些结果相关。例如:http://blog.hackedbrain.com/articles/UnderstandingDependencyObjectAndDependencyProperty.aspx
我猜其中一个原因是上下文。绑定内置于 WPF 的基础结构中,但 C# 类属性不属于那里。为了让 WPF 基础结构找到可绑定的属性,您必须在代码中声明它们。此外,如果您声明您的属性,您将为 WPF 基础设施提供重要的元数据。
虽然我同意如果可以绑定到常规属性会更容易,但这肯定是一个例子,不要用小细节打扰你宝贵的大脑......
【讨论】: