通過我想比較和交換值的兩個視圖模型的公共屬性,最理想的是採用這樣的方法:如何在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");
}
}
做不到這一點......如果我只是嘗試閔getter或setter,當閩更改爲大於Max的值中直接使用「如果比較」的邏輯,我剛剛結束了與民平等到最大。
編輯:根據有關備份性能的建議我已經修改了的方法是:
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);
}
}
和 「最小」 屬性setter這樣:
min = value;
SwapIfGreater<Int32>(ref min, ref max, "Max");
OnPropertyChanged("Min");
上午什麼我錯過了?當Min大於Max時,這仍然只是將Max設置爲Min。
編輯:雖然我渴望學習,我上面做錯了什麼,已經重新它實現了交換的行爲,我想重複測試的UI,我已經意識到這是一個討厭的UX,作爲用戶迫使他們再次點擊兩個選手。如果用戶選擇高於最大值的Min,反之亦然,我將恢復到原來的將Max重置爲「No Maximum」的實現。
屬性,屬性...你忘了支持字段? –
@IvanStoev我無法忘記我還沒有學到什麼。 :) – RichardD