7

我创建了一个这样的依赖属性:

public partial class MyControl: UserControl
{
   //...

   public static DependencyProperty XyzProperty = DependencyProperty.Register("Xyz",typeof (string),typeof (MyControl),new PropertyMetadata(default(string)));

   public string Xyz
   {
       get { return (string) GetValue(XyzProperty ); }
       set { SetValue(XyzProperty , value); }            
   }

   //...
}

然后将它绑定到我的 wpf 窗口,一切正常。

当我尝试向 setter 添加一些逻辑时,我注意到它没有被调用。我修改了get;设置到现在它们看起来像这样:

 get{return null;}
 set{}

它仍然有效!怎么会?GetValue/SetValue 调用有什么用?

4

2 回答 2

8

WPF 数据绑定基础结构直接使用 DependencyProperty,Xyz 属性是程序员的便利接口。

查看对 DependencyProperty.Register 的调用中的PropertyMetadata,您可以提供一个回调,该回调将在属性值更改时运行,这是您可以应用业务逻辑的地方。

于 2012-08-10T17:26:04.900 回答
1

DependencyProperty 是 XyzProperty 的后备存储。如果您通过 DependencyProperty 接口访问属性,它将完全绕过属性的 Get/Set 访问器。

这样想:

private int _myValue = 0;

public int MyValue
{
    get { return _myValue; }
    set { _myValue = value; }
}

在这种情况下,如果我手动分配_myValue = 12,显然不会调用 MyValue 属性的“Set”访问器;我完全绕过它!DependencyProperties 也是如此。WPF 的绑定系统直接使用 DependencyProperty 接口。

于 2012-08-10T17:29:56.447 回答