什么是 .Net 中的依赖属性(尤其是在 WPF 上下文中)。和普通房产有什么区别?

有帮助吗?

解决方案

依赖属性是从DependencyObject派生的类的属性,它们的特殊之处在于它不是简单地使用支持字段来存储它们的值,而是在DependencyObject上使用一些辅助方法。

关于它们最好的事情是它们内置了数据绑定的所有管道。如果你将它们绑定到它们,它们会在它们发生变化时通知它。

其他提示

我发现唯一有用且写得很好的解释是: http://www.wpftutorial.net/dependencyproperties.html

基本上,DependencyProperties与常规属性的不同之处在于它们不仅仅是类中字段的setter / getter,而是在运行时动态检索它们的实际值。 DP的 SetValue()方法非常简单,并将属性的本地值设置为您给出的值。但是,当您尝试从DependencyProperty GetValue()时,它将首先查找本地值,如果不存在(这与DependencyProperties不同,它与常规属性不同)它将继续逻辑UI树直到它会找到这样的价值。如果框架已到达树的顶部而未找到任何本地值,则它将使用预定义的默认值作为属性的值。

此方法允许DependencyProperties比常规属性消耗更少的内存,因为只有用户显式设置的值才会存储在本地。

并且,如上所述,DependencyProperties还允许我们在XAML代码中绑定它们并在它们上设置触发器,这在常规属性上是不允许的。

我希望我已经设法澄清了一些模糊性:)

http:// techpunch .wordpress.com / 2008/09/25 / wpf-wf-what-is-a-dependency-property / 在WF和WPF的上下文中提供了依赖属性的一个很好的解释。

摘录:

  

关键点–依赖属性的值已得到解决

     

依赖属性的最终目标,就像任何属性一样,是管理状态。但与普通.Net属性不同,本地属性值不存储在实例变量中。

     

相反,依赖项属性在依赖项属性框架中注册,并且基础属性值已解析–意味着该值由依赖属性框架根据属性注册定义的规则确定。

通过类比进行无代码解释(约 5 分钟)

如果你不喜欢故事那就省省心(约 5 分钟)

我们必须了解一些概念:

  • 树上的值解析/属性值继承和
  • 多提供商支持
  • 变更通知

(a) 值解析/属性值继承

让我们用人类基因的例子来解释这个概念。

每个人或多或少都是一样的

人类拥有大量与之相关的信息。无数成百上千的数据与你相关——

  • 你有多少根手指,

  • 有多少个脚趾,

  • 您有多少 BRCA2 基因等

我们要解决的问题是什么?

我们希望能够直接回答那些向我们询问自己的人,而无需携带所有这些信息。

所以问题是:你怎么能记住这一切?嗯,最初人们开始写下所有这些东西,但很快他们意识到他们需要携带大约 10 卷的黄页——基本上是整个亚历山大图书馆(硬拷贝格式)放在他们的后袋里,以便能够回答所有这些问题:那东西太多了,没法随身携带。

解决方案:将常用信息存储在一处

于是有人想出了一个好主意。他们注意到大多数时候信息是相同的。例如大多数人都有:

  • 一心

  • 一张脸等

  • 三个 BRCA2 基因

没有必要每个人的后兜里都携带大约 30 磅的纸张。您可以将所有这些信息存储在 一个地方, ,在一个中央图书馆。人们可以自由地走动,而不会因为携带这些信息而受到负担。

但总有例外……并不是每个人都有相同的血型,或者头上有相同数量的毛囊。如果与正常情况存在差异或例外,那么您只需将这些例外放在后兜里(即随身携带)。字典中),而不是整个书架上的书籍。请记住,在大多数情况下,人们都是一样的——他们拥有相同的价值观,而且这一点很少会改变。如果您没有在口袋里写下例外情况,那么您可以简单地向面试官推荐存储在公共存储库中的数据。

例子:记者采访唐纳德·特朗普总统**

让我们通过一个例子来尝试一下。

我们有一个 Person 的实例:唐纳德·特朗普。一位新闻记者向我们尊敬的总统询问一些问题:

“特朗普总统先生,您有多少个 HIF1A 基因?”

唐检查了他的后口袋。那里没有列出他有多少基因。所以他只是告诉记者,他有其他人都有的默认号码。“和其他人一样,”特朗普说。“你可以在图书馆找到答案”。因此,记者只是前往图书馆了解这一具体细节。

“特朗普总统先生,您有几张面孔?

这个值可以在本地解析吗?看起来这个值是在本地解决的,因为答案就在特朗普的后口袋里:2 - 立即返回给记者。

树上的值解析

事实上,事情比答案放在后口袋或以其他方式保存在中央图书馆要复杂一些。有许多中介地方可以存储相同的信息,因此是“解决财产价值”的理想选择。因此,事情可能从后口袋开始,然后记者可能必须按升序检查一大堆中间位置,才能得到答案。例如记者可能会从其他报纸开始,然后是法庭文件,如果所有这些都失败了,如果没有找到答案,那么答案就是中央图书馆中包含的默认值。

简单来说,事情先跟人解决,然后再向上层层解决:最终要么是上帝,要么是意大利面怪物,视情况而定。最后,你会不断提升,直到得到答案。最终,所有的答案都得到了解答。

概括

简而言之,依赖属性是一种可以在本地解析或在 UI 树上解析的属性(视情况而定)。我们这样做的原因是因为 UI 元素有成百上千个属性,如果您将它们存储为每个属性的支持字段,这些属性很快就会耗尽您的内存。由于这些字段中的大多数从不或很少更改,因此无需将它们存储为支持字段,并且可以通过向上树解析它们的值。

最后,您可以免费获得内置的自动更改通知。

诚然,这个类比有点牵强,但我希望它能有所帮助。

**仍在等待特朗普承诺的(防火墙)墙。需要将 Spamicans 拒之门外。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top