试图了解DependencyProperty

时间:2011-09-29 03:03:36

标签: c# wpf binding dependencies

成为WPF的新手,它显然具有改变,绑定,启用和操作方式的惊人能力。我正在努力对所发生的事情进行精神概述,并希望有些人可以确认或纠正我的读数。

在WPF之前,您有代表和事件。你可以有十几个控件全部监听(通过注册到事件),所以当事件触发时,所有其他控件将被自动通知并且可以采取行动但是它们是如此编码的。比如...

从Code Behind,您可以执行类似

的操作
GotFocus += MyMethodToDoSomething;

然后,签名方法

private void MyMethodToDoSomething(object sender, RoutedEventArgs e)
{
  .. do whatever
}

此外,通过使用标准的getter / setter,setter可以在自己的类中调用自己的方法,以便在每次有人试图获取或设置值时执行某些操作

private int someValue;
public int SomeValue
{
   get { this.DoSomeOtherThing();
         return someValue;
       }

   set { this.DoAnotherThing();
        someValue = value;
}

现在,有依赖项属性和单/双向绑定。我理解(我认为)关于模拟更多只读操作的单向方法。

无论如何,通过双向绑定,依赖关系会自动通知任何人“依赖”源或目标中的更改,而无需显式检查某些事件是否订阅了事件,框架会自动处理更改的通知到各自的控制(目标或来源)。

所以,让我通过一个旧的添加/编辑保存/取消维护表单来完成这个场景。 在较旧的框架中,如果有人单击了添加或编辑按钮,则所有数据输入字段将“启用”,其中包含新记录的空白数据或编辑现有数据。同时,添加/编辑按钮将被禁用,但现在将启用保存/取消按钮。

同样,当通过“保存/取消”完成时,它将禁用所有输入字段,保存/取消,并重新启用“添加/编辑”按钮。

我不太明白在这种依赖属性方案下如何处理这种类型的场景(但是),但是我关闭了吗?我也明白你几乎可以绑定任何东西,包括配色方案,显示/隐藏,字体等......但是我正在尝试真正掌握这些东西。

感谢。

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

海报要求我重新发表评论作为答案。很高兴: - )

此外,我发现这本书非常有用:http://www.amazon.com/WPF-4-Unleashed-Adam-Nathan/dp/0672331195

我自己使用WPF的经验涉及在尝试让我的程序运行时在一堆不同的资源之间返回。在WPF中有这么多东西,当你正在学习它时,很难将它全部保留在脑海中。

答案 2 :(得分:1)

查看它们的一种简单方法是它们是指向另一个属性的属性。

它们实际上是属性的定义,它定义属性名称,类型,默认值等,但属性的实际值不与属性定义一起存储。

所以你可以说Button的Enabled属性将指向特定类的属性,或者它将指向CheckBoxA.IsChecked属性,或者你甚至可以说它只是指向一个布尔值为False。

// Value points to the current DataContext object's CanSaveObject property
<Button IsEnabled="{Binding CanSaveObject}" />

// Value points to the IsChecked property of CheckBoxA
<Button IsEnabled="{Binding ElementName=CheckBoxA, Path=IsChecked}" />

// Value points to the value False
<Button IsEnabled="False" />