2

我有IntegerUpDown这样的

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

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

我怎样才能做到这一点?

4

3 回答 3

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)方法的控件。

于 2015-04-13T09:01:19.733 回答
2

您可以使用 Value changed 事件来获取当前值。在值更改事件中,检查值,如果等于最大值,请将其设置为最小值,如下所示:

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

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

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

于 2015-04-13T09:01:29.393 回答
1

您还可以删除 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;
于 2016-02-11T16:47:02.503 回答