如何注册一个依赖属性,其值是使用另一个依赖属性的值计算出来的?
因为在运行时,WPF会绕过.NET属性包装器,所以不应在getter和setter中包含逻辑。解决方案通常是使用PropertyChangedCallback
。但这些是静态声明的。
例如,如何正确完成这个假想任务:
public bool TestBool
{
get { return (bool)GetValue(TestBoolProperty); }
set
{
SetValue(TestBoolProperty, value);
TestDouble = ((value)?(100.0):(200.0)); // HERE IS THE DEPENDENCY
}
}
public static readonly DependencyProperty TestBoolProperty =
DependencyProperty.Register("TestBool", typeof(bool), typeof(ViewModel));
public double TestDouble
{
get { return ((double)GetValue(TestDoubleProperty)); }
set { SetValue(TestDoubleProperty, value); }
}
public static readonly DependencyProperty TestDoubleProperty =
DependencyProperty.Register("TestDouble", typeof(double), typeof(ViewModel));
只要依赖关系不是循环的,是否有适当的方法来实现这一点?
CoerceValueCallback
的优点是什么,与opedog直接在另一个依赖属性的PropertyChangedCallback
中更改依赖属性相比有何不同?从您链接的文档中我了解到,您的方法更为正确,但我很想知道实际上的区别。 - Gregyski