통과 할 수 없습니다 : 당신은 심판에 의해 등록 정보를 전달할 수 없습니다로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");
}
}
난 그냥 최소가 최대보다 큰 값으로 변경되는 최소 게터 또는 세터 내에서 직접 "비교하면"논리를 사용하려고하면 그게 ... 난 그냥 최소 동일로 결국 실패 ~ 맥스.
편집은 : 속성을 백업하는 방법에 대한 조언에 근거하여 나는이에 방법을 수정했습니다
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의 실현했습니다 두 피커를 다시 클릭해야합니다. 사용자가 Max보다 높은 Min을 선택하면 Max를 "No Maximum"로 리셋하는 원래 구현으로 되돌릴 것입니다.
속성, 속성 ... 배경 필드를 잊어 버리셨습니까? –
@IvanStoev 나는 아직 배웠던 것을 잊을 수 없었다. :) – RichardD