绑定到依赖属性魔法

时间:2014-09-30 17:23:25

标签: c# wpf xaml binding

我有一个依赖属性:

public bool IsApproved //Dependency property
{
    get { return (bool)GetValue(IsApprovedProperty); }
    set { SetValue(IsApprovedProperty, value); }
}

public static readonly DependencyProperty IsApprovedProperty =
    DependencyProperty.Register("IsApproved", typeof(bool), typeof(MyClass), new UIPropertyMetadata(true));

并且绑定到此属性的2个控件:

当我选中/取消选中该复选框时,mypanel的可见性会发生变化,并且确定无效。 但是,当我把断点加入到获得和设置的IsApproved时 - 它永远不会停在那里。

它是如何运作的?

由于

2 个答案:

答案 0 :(得分:4)

来自MSDN

  

因为当前的WPF实现了XAML处理器的行为   对于属性设置完全绕过包装器,你不应该   将任何其他逻辑放入包装器的set定义中   您的自定义依赖属性。如果你把这样的逻辑放在集合中   定义,然后在属性时不执行逻辑   在XAML而不是代码中设置。

换句话说,框架不使用CLR包装器属性。如果直接通过代码设置CLR属性,当然会运行set逻辑。要检测对属性的框架更改,您需要在注册期间使用metadata属性注册PropertyChanged回调。

答案 1 :(得分:1)

WPF数据绑定系统直接通过SetValue()修改DependencyProperties,而不通过你的属性设置器(实际上并不需要存在)。

要查看更改,请在UIPropertyMetadata

中添加回调