我有一个依赖属性:
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时 - 它永远不会停在那里。
它是如何运作的?
由于
答案 0 :(得分:4)
来自MSDN:
因为当前的WPF实现了XAML处理器的行为 对于属性设置完全绕过包装器,你不应该 将任何其他逻辑放入包装器的set定义中 您的自定义依赖属性。如果你把这样的逻辑放在集合中 定义,然后在属性时不执行逻辑 在XAML而不是代码中设置。
换句话说,框架不使用CLR包装器属性。如果直接通过代码设置CLR属性,当然会运行set
逻辑。要检测对属性的框架更改,您需要在注册期间使用metadata属性注册PropertyChanged
回调。
答案 1 :(得分:1)
WPF数据绑定系统直接通过SetValue()
修改DependencyProperties,而不通过你的属性设置器(实际上并不需要存在)。
要查看更改,请在UIPropertyMetadata
。