Я хотел бы сравнить и поменять местами значения двух открытых свойств ViewModel, в идеале, используя метод, как это:Как изменить значения свойств в ViewModel? Не могу пройти мимо исх
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Но так как вы не можете передать свойства, реф, я не может сделать это в моей модели ViewModel.
private Int32 max;
public Int32 Max
{
get { return max; }
set
{
SwapIfGreater<Int32>(ref Min, ref Max);
max = value;
OnPropertyChanged("Max");
}
}
private Int32 min;
public Int32 Min
{
get { return min; }
set
{
SwapIfGreater<Int32>(ref Min, ref Max);
min = value;
OnPropertyChanged("Min");
}
}
В противном случае ... если я просто пытаюсь использовать «если сравнивать» логику непосредственно в геттер или сеттера Min, когда Min изменяется на значение, большее, чем Макс, я в конечном итоге с Min равной до Макс.
EDIT: На основе рекомендаций о резервном свойства я внес изменения в метод это:
void SwapIfGreater<T>(ref T lhs, ref T rhs, String otherPropertyName) where T : System.IComparable<T>
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
OnPropertyChanged(otherPropertyName);
}
}
и "Min" сеттер собственности на это:
min = value;
SwapIfGreater<Int32>(ref min, ref max, "Max");
OnPropertyChanged("Min");
Что утра Я пропустил? Это еще только установка Max to Min, когда Min больше Max.
EDIT: Хотя я заинтересован, чтобы узнать, что я делаю неправильно, выше, снова реализующее поведение своп Я хотел повторить тестирование пользовательского интерфейса, я понял, что это противный UX, как пользователь это сила, чтобы затем снова щелкнуть оба сборщика. Я вернусь к первоначальной реализации сброса Max до «Без ограничений», если пользователь выбирает Min выше Max и наоборот.
Недвижимость, недвижимость ... Вы забыли о подкладках? –
@ ИванСтоев Я не мог забыть то, что еще не узнал. :) – RichardD