如果超过最大值,我如何将IntegerUpDown的值重置为最小值

时间:2015-04-13 08:19:12

标签: c# wpf wpftoolkit xceed integerupdown

我有IntegerUpDown喜欢这个

<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>. 

如果值为 - SomeValue == 2 (Maximum),我就是。 我想在Control中单击向上箭头时设置SomeValue = 0 (Minimum)

我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果您想在View端执行此操作,对于简单的脏解决方案,您可能需要尝试处理ValueChanged事件并检查是否达到最小值或最大值。它可能不会允许您在达到最大值/最小值时更改值,因此您可能希望将值设置为 <xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="3" Minimum="-1"/>.如果已达到,则将其相应更改为0或2。

为了获得更好,更清洁的解决方案,我不确定当您尝试将值更改为超出最大值/最小值时会引发其他事件。但您可以基于IntegerUpDown创建控件并覆盖int IncrementValue(int value, int increment)int DecrementValue(int value, int increment)方法。

答案 1 :(得分:2)

您可以使用Value changed事件来获取当前值。在Value changed事件中,检查值,如果它等于Maximum,则将其设置为Minimum,如下所示:

private void IntegerUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        var updown = (sender as IntegerUpDown);
        if (updown.Value == updown.Maximum)
            updown.Value = updown.Minimum;
    }

如果您使用的是MVVM,请使用交互行为或命令来执行相同操作。

或者可能是,您可以将Value绑定到ViewModel中的属性,就像您可以将Max,Min Value绑定到ViewModel中的属性一样。并且您可以检查Value属性的属性更改事件的值,并可以将Value on设置为高于Maximum value属性。

答案 2 :(得分:0)

您还可以删除xaml中的最小/最大限制:

<xctk:IntegerUpDown Value ="{Binding SomeValue}" />

然后在视图模型中处理最小/最大限制和翻转:

public double SomeValue
{
    get { return _SomeValue; }
    set
    {
        if (value < 0)
            _SomeValue = 0;
        else if (value >= 2)
            _SomeValue = 0;
        else
            _SomeValue = value;
        OnPropertyChanged("SomeValue");
    }
}
private double _SomeValue = 1;