问题描述
我有一个带有 Numericupdown
控件的视图,但它不像我预期的那样工作。
试过 Exceed/Numericupdown
和 MahApps/Numericupdown
- 同样的问题。
它是这样定义的:
<mahapps:Numericupdown Width="200" Interval="1"
Visibility="{Binding Path=ControlValueQuantityIsVisible,Mode=TwoWay,Converter={StaticResource BoolToVisibilityConverter}}">
<mahapps:Numericupdown.Value>
<Binding Mode="TwoWay" Path="ValueQuantity" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
<!-- With or without ValudationRule - same problem -->
</Binding>
</mahapps:Numericupdown.Value>
</mahapps:Numericupdown>
private double? _valueQuantity;
public double? ValueQuantity
{
get { return _valueQuantity; }
set
{
SetProperty(ref _valueQuantity,value);
CommandOK.RaiseCanExecuteChanged();
}
}
此外,我有一个按钮 (Focusable=False) 将 viewmodel
的 ValueQuantity
属性更改为“99”
如果我只是按下那个按钮,或者在 Numericupdown
中输入值,或者点击它的旋转按钮 - 它工作正常。
然后我选择 Numericupdown
的文本框中的所有文本并在其上键入“1”。
然后我按下按钮 - 并且 Numericupdown
仍然显示“1”,即使 ValueQuantity
setter 中的断点显示正确的值 = 99。
为什么 Numericupdown
在其文本框中没有反映 ValueQuantity
的变化?
解决方法
您必须使按钮可聚焦。
重点是输入字段是一个 TextBox
,默认情况下它会在失去焦点时更新绑定:Binding.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus
。
因此,您必须使输入字段失去焦点才能触发绑定。您必须将焦点移到另一个 focusable 元素。