2016-10-17 1 views
1

변경 사항에 대한보기를 알리기 전에 여러 속성을 업데이트하는 방법을 알 수 없습니다. DateTime으로 시작, TimeSpan으로 StartTime, DateTime으로 End, TimeSpan으로 EndTime으로 ViewModel을 얻었습니다. StartTime을 설정하면 이에 따라 End와 EndTime을 업데이트하려고합니다. StartTime을 나중에 EndTime으로 설정하면 EndTime을 StartTime + 30 분으로 업데이트하고 싶습니다. WPF에서 ViewModel의 모든 private 속성을 업데이트 한 다음 PropertyChange 이벤트를 호출 할 수 있었지만이 프리즘을 사용하면이 작업을 수행하는 방법을 이해할 수 없습니다. SetProperty 메서드를 사용하여 PropertyChanged 이벤트를 호출 할 수있는 것 같습니다. 나는단일 속성 집합의 여러 속성 업데이트

DateTime? _start = DateTime.Now; 
TimeSpan? _startTime = DateTime.Now.TimeOfDay; 
DateTime? _end = DateTime.Now; 
TimeSpan? _endTime = DateTime.Now.TimeOfDay; 
public TimeSpan? StartTime 
{ 
    var val = value; 
    _end = new TimeSpan(val.Hours, val.Minutes + 30, 0); 
    SetPropertyChanged(ref _startTime, val); 
} 

답변

2

당신은 같은 것을 할 수 있습니다.

+0

그와 같은 것을 시도했기 때문에 재미 있습니다. 테스트 한 결과 작동하지 않습니다. 하지만 이제는 내가 처음부터 그 일을 시작했을 때 처음으로 뭔가 잘못했을 것입니다 .. 고마워요! –

0

더 좋은 것은 상영 시간 + 지속 시간 등의 종료 시각을 표현하고, 상영 세터 단지 두 속성하여 PropertyChanged 전화를 .. 내가 할 필요가 생각했던 작은 예제를 만들었습니다. 또한 VM 등록 정보에서 사용되는 개인 필드를 직접 설정하면 안됩니다.

private int _myFieldA; 
private int _myFieldB; 

public int MyPropertyA 
{ 
    get { return _myFieldA; } 
    set 
    { 
     _myFieldA = value; 
     _myFieldB = value + 10; 
     OnPropertyChanged(() => MyPropertyA); 
     OnPropertyChanged(() => MyPropertyB); 
    } 
} 

public int MyPropertyB 
{ 
    get { return _myFieldB; } 
    set 
    { 
     _myFieldA = value - 10; 
     _myFieldB = value; 
     OnPropertyChanged(() => MyPropertyA); 
     OnPropertyChanged(() => MyPropertyB); 
    } 
} 

PropertyChanged 이벤트가 항상하지만, 잇달아 발생하지만, 하나가 발사 될 때 데이터가 항상 일치 :

+1

왜 내가 ViewModel에서 직접 개인 속성을 설정하지 않아야합니까? –

+1

속성이 아님, 속성을 지원하는 필드 만 있으므로 PropertyChanged 또는 설정자에있는 모든 것을 반드시 호출해야합니다. –

0

뒷받침 필드 대신 EndTime 속성을 설정하면 EndTime 속성이 올바르게 정의되어 있다고 가정하고 INPC를 호출합니다.

public TimeSpan? StartTime 
{ 
    SetProperty(ref _startTime, val); 
    EndTime = StartTime + duration; 
}