2015-04-13 4 views
2

меня IntegerUpDown как этотКак Сбросить значение IntegerUpDown до минимума, если она превышает максимальную

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

я был, если значение - SomeValue == 2 (Maximum). Я хочу установить SomeValue = 0 (Minimum), когда я нажимаю на стрелку вверх в Control.

Как я могу это сделать?

+0

в Telerik управления, мы есть свойство AutoReverse, есть ли у вас что-то подобное? – Muds

+0

У нас нет чего-то подобного. – Vlad

+0

ах, это позор .. – Muds

ответ

2

Вы можете использовать событие с измененным значением, чтобы получить текущее значение. В изменении значения события, проверить значение, если она равна максимальной, установите его 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, а затем использовать поведение взаимодействия или команды, чтобы сделать то же самое.

:

или может быть, вы привязываете значение к свойству в ViewModel, так же как вы можете привязать значение Max, Min Value к свойствам в ViewModel. И вы можете проверить значение в событии с измененным свойством свойства Value, и можете установить значение on выше свойства Maximum value.

2

Если вы хотите сделать это на стороне просмотра, для простого грязного решения вы можете попробовать обработать событие 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).

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; 
Смежные вопросы