情景:
将值更改为超出这些范围的值。列出的那些约束的操作顺序是:
因此,ViewModel属性获取uncoerced值,UI将显示强制值。
为什么会这样? CoerceValueCallback的目的是什么?
我现在唯一可以解决的问题是实现所有边界检查我的viewmodel,但是如果可能的话我想避免这样做。
以下是一些显示一般情况的代码:
MyControl.xaml.cs
...
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
nameof(Value),
typeof(double),
typeof(MyControl),
new PropertyMetaData(0.0, ValuePropertyChanged, ValueCoerce));
private static object ValueCoerce(DependencyObject d, object baseValue)
{
// Do Coercion
return coercedValue; // This happens AFTER the BoundValue was already updated.
}
...
ViewModel.cs
...
public double BoundValue
{
get => _boundValue;
set
{
_boundValue = value; // This gets the uncoerced value.
OnPropertyChanged(nameof(BoundValue))
}
}
...
View.xaml
...
<local:MyControl Value="{Binding BoundValue, Mode=TwoWay}"/>
...