依赖属性

时间:2010-04-02 19:14:33

标签: c# wpf

任何人都可以向我解释WPF中的依赖属性是什么以及它的用途。我知道google上有很多关于它的教程,但是它们教会了如何创建依赖属性。我很困惑我会在哪里使用它。我的意思是我会在XAML中使用它吗?如果有人能用简单的语言解释我,那就太好了。

如果一个简单的例子和​​XAML一起展示会很好,例如,我可以如何使用该属性,以及使用它后会产生什么效果。   非常感谢您的所有答案..

5 个答案:

答案 0 :(得分:13)

列出的许多链接应该可以让您了解依赖属性是什么,但总的来说,最简单的思考方式我认为如下:

如果您希望能够使用WPF的数据绑定绑定它们,则需要使用依赖项属性来处理用户界面元素的属性。为了成为数据绑定操作的“目标”,您需要将属性设置为依赖属性。

当您实现标准类(它成为“控件”的DataContext)时,您将需要使用INotifyPropertyChanged而不是DP。这允许该类成为绑定“源”。

一般情况下,如果你正在制作一些将被绑定在XAML中的东西,你只需要创建依赖属性,作为UIelement的Target。例如,假设我们有这样的XAML:

<local:MyControl ControlProperty="{Binding SomeProperty}" />

通常,ControlProperty将成为Dep。属性,因为它是绑定目标,并且SomeProperty将是实现INotifyPropertyChanged的类中的标准CLR属性(而不是DP)。

答案 1 :(得分:3)

Dependency Property不会将其值存储在字段中,而是存储在某个哈希表中。因此,它需要更少的内存,这对于GUI对象尤其重要,因为大多数属性将保留其默认值,因此不会占用更多内存。然而,依赖属性有点慢,因为来回装箱并在哈希表中查找。

Dependency Object框架还允许更改通知等许多功能。我找到了一个很好的资源来解释这里的内部工作:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c33a8359-58be-430d-b949-cb6e6f32d8aa

我同意声明它们的语法有点难看,但你可以创建助手来缓解这一点。

答案 2 :(得分:1)

这可能是描述DP的最直接的文章:

http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-dependency-properties-in-wpf/

就个人而言,当我需要公开属性以便它们可以通过XAML进行数据绑定时,我经常使用它们。例如,如果我创建一个我想在XAML中使用的UserControl,并且我想通过XAML在UserControl上设置一个属性,我将它作为依赖属性公开。

答案 3 :(得分:1)

你正在寻找的是WPF Unleashed的chapter 3。这是一个免费的样本章节。

答案 4 :(得分:0)

我看到它的最佳用途是将属性附加到您无法修改的类。因此,如果您获得第三方程序集,您可以在课程中附加额外信息并在需要时阅读它们。