检查两个DecimalUpDown控件之间的有效值 - MVVM

时间:2017-09-28 09:02:45

标签: c# wpf xaml mvvm

我的窗口中有两个DecimalUpDown控件。应该显示TextBox的另一个最小值的最大值。 最小控制的值不能大于最大值,反之亦然。

enter image description here

请注意,红色值是错误的。

我该如何实现?我正在使用MVVM模式。

谢谢。 史蒂夫

3 个答案:

答案 0 :(得分:1)

您应该在视图模型中实现验证逻辑:

public class MyViewModel : IDataErrorInfo
{
    private int _min;
    public int Min
    {
        get { return _min; }
        set { _min = value; }
    }

    private int _max;
    public int Max
    {
        get { return _max; }
        set { _max = value; }
    }

    public string Error { get { return null; } }

    public string this[string columnName]
    {
        get
        {
            switch(columnName)
            {
                case "Min":
                    if (_min > _max)
                        return "Min cannot be greater than Max";
                    break;
                case "Max":
                    if (_max < _min)
                        return "Max cannot be smaller than Min";
                    break;
            }

            return null;
        }
    }
}

<强> XAML:

<xctk:IntegerUpDown Value="{Binding Min,ValidatesOnDataErrors=True}" />
<xctk:IntegerUpDown Value="{Binding Max,ValidatesOnDataErrors=True}" />

有关WPF中数据验证的工作原理的更多信息,请参阅以下博文:https://blog.magnusmontin.net/2013/08/26/data-validation-in-wpf/

您基本上可以在视图模型中实现IDataErrorInfo或更新INotifyDataErrorInfo

答案 1 :(得分:-1)

据我所知,您需要比较VM属性的setter中的max和min值

答案 2 :(得分:-2)

您可以在文本框中使用onChange事件。 (选择您的textBox并检查事件窗口,您将找到所有事件)

Wen change =&gt;比较价值 如果错误=&gt;显示消息