NumericUpDown 不反映绑定值的变化

问题描述

我有一个带有 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>
    

它绑定到viewmodel属性ValueQuantity

    private double? _valueQuantity;
    public double? ValueQuantity
    {
        get { return _valueQuantity; }
        set
        {
            SetProperty(ref _valueQuantity,value);
            CommandOK.RaiseCanExecuteChanged();
        }
    }

此外,我有一个按钮 (Focusable=False) 将 viewmodelValueQuantity 属性更改为“99”
如果我只是按下那个按钮,或者在 Numericupdown 中输入值,或者点击它的旋转按钮 - 它工作正常。 然后我选择 Numericupdown 的文本框中的所有文本并在其上键入“1”。 然后我按下按钮 - 并且 Numericupdown 仍然显示“1”,即使 ValueQuantity setter 中的断点显示正确的值 = 99。 为什么 Numericupdown 在其文本框中没有反映 ValueQuantity 的变化?

解决方法

您必须使按钮可聚焦。

重点是输入字段是一个 TextBox,默认情况下它会在失去焦点时更新绑定:Binding.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus

因此,您必须使输入字段失去焦点才能触发绑定。您必须将焦点移到另一个 focusable 元素。