【发布时间】:2010-10-11 15:58:19
【问题描述】:
.Net 中的依赖属性是什么(尤其是在 WPF 上下文中)。和普通属性有什么区别?
【问题讨论】:
标签: .net workflow-foundation dependency-properties
.Net 中的依赖属性是什么(尤其是在 WPF 上下文中)。和普通属性有什么区别?
【问题讨论】:
标签: .net workflow-foundation dependency-properties
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ 很好地解释了 WF 和 WPF 上下文中的依赖属性。
摘录:
关键点——解决依赖属性的价值
与任何属性一样,依赖属性的最终目标是管理状态。但与普通 .Net 属性不同的是,本地属性值不存储在实例变量中。
相反,依赖属性在依赖属性框架中注册,并且底层属性值被解析——这意味着该值由依赖属性框架根据属性注册定义的规则确定。
【讨论】:
依赖属性是派生自 DependencyObject 的类的属性,它们的特殊之处在于它们不是简单地使用支持字段来存储它们的值,而是在 DependencyObject 上使用一些辅助方法。
它们最棒的地方在于,它们内置了所有数据绑定管道。如果您将某些内容绑定到它们,它们会在更改时通知它。
【讨论】:
我发现唯一有用且写得很好的解释是:http://www.wpftutorial.net/dependencyproperties.html
基本上,DependencyProperties 与常规属性的不同之处在于它们不仅仅是类中字段的设置器/获取器,而且它们在运行时动态地检索它们的实际值。 DPs 的SetValue() 方法非常简单,它将属性的本地值设置为您给它的值。但是,当您尝试从 DependencyProperty 中 GetValue() 时,它会首先查找本地值,如果不存在(这在 DependencyProperties 中与常规属性不同),它将继续沿着逻辑 UI 树向上直到找到这样的值.如果框架在没有找到任何本地值的情况下到达树的顶部,它将使用预定义的默认值作为属性的值。
此方法允许 DependencyProperties 比常规属性消耗更少的内存,因为只有用户明确设置的值才会存储在本地。
而且,如上所述,DependencyProperties 还允许我们在 XAML 代码中绑定到它们并在它们上设置触发器,这在常规属性上是不允许的。
我希望我已经设法消除了一些模糊性:)
【讨论】:
Button 上的 Grid.Row="1" 会将其设置为父 Grid 上的第 2 行(由于行是从零开始的),但 Row DependencyProperty 属于 Grid对象。
DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed 时,您的意思是在 XAML 中绑定和设置触发器还是不允许仅设置触发器。感谢您的跟进和帮助让事情变得更清晰!
Value 属性(不是 DP),并且您希望您的视图在 Value 更改为 1 时执行某些操作。您可以使用 DataTrigger 并设置 Binding={Binding Path=Value, Value=1}