Как сбросить значение IntegerUpDown до минимума, если оно превышает максимальное
Я имею IntegerUpDown
как это
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>.
Я был, если значение - SomeValue == 2 (Maximum)
, Я хочу установить SomeValue = 0 (Minimum)
когда я нажимаю на стрелку вверх в элементе управления.
Как я могу это сделать?
3 ответа
Вы можете использовать событие "Изменено значение" для получения текущего значения. В событии "Значение изменено" проверьте значение, если оно равно Максимуму, установите для него значение "Минимум" следующим образом:
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, как если бы вы могли привязать максимальное, минимальное значение к свойствам в ViewModel. Кроме того, вы можете проверить значение в событии измененного свойства свойства Value и установить значение On выше значения свойства Maximum value.
Если вы хотите сделать это на стороне 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)
методы.
Вы также можете удалить минимальные / максимальные ограничения в xaml:
<xctk:IntegerUpDown Value ="{Binding SomeValue}" />
А затем обработайте ограничение min/max и опрокидывание в вашей модели представления:
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;