2016-06-07 3 views
0

RaiseProperty 호출하지 않습니다. 다음 코드에 무엇이 누락되어 있는지 궁금합니다. 내가 디버그 할 때, 나는 StartTime이 호출 된 것을 본다.RaisePropertyChanged가 mvvmcross를 호출하지 않습니다.

private DateTime _startTime; 
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
     _startTime = value; 
     // I could able to see the following line gets called when I am in debug mode 
     RaisePropertyChanged(() => StartDateTime); 
    } 
} 

는 다음이

private DateTime _startDateTime; 
public DateTime StartDateTime 
{ 
    get { return _startDateTime; } 
    set 
    { 
     _startDateTime = StartDate.Add(StartTime.TimeOfDay); 
    } 
} 
+0

두 번째 호출에서 'RaisePropertyChanged'가 없거나 잘못 되었나요? –

+0

내가 원하는 것을 정확하게 이해하고 있는지 확실하지 않습니다. RaisePropertyChanged (() => StartDateTime)를 기대 했습니까? 실제로 StartDateTime 속성의 setter를 호출하는 결과가 발생합니까? 그 이유는 RaisePropertyChanged가 목적이 아니기 때문입니다. –

+0

케빈과 피터 네 말이 맞다. 'StartDateTime'이 호출되기를 원합니다. – hotspring

답변

3

그래서 StartDateTime는 기본적으로 계산 된 속성입니다 호출되지 않습니다. 다음과 같이 정의 할 수 있습니다 : 상영이 업데이트 또는 STARTDATE는 업데이트됩니다

public DateTime StartDateTime 
{ 
    get 
    { 
     return StartDate.Add(StartTime.TimeOfDay); 
    } 
} 

지금은 그 변화가 예를 들어 UI에 반영하고자합니다. 당신이 RaisePropertyChanged(() => StartDateTime); 상영이 업데이트 이제

private DateTime _startTime; 
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
     _startTime = value; 
     RaisePropertyChanged(() => StartDateTime); 
    } 
} 

에 대한 호출이 필요하다는 트리거하려면 UI는 StartDateTime뿐만 아니라 변화하는 신호를 얻을 것이다.

StartDate 또는 StartTime의 변경이 StartDateTime의 다른 값으로 연결되기 때문에 StartDate 속성도 RaisePropertyChanged(() => StartDateTime);을 호출해야합니다.

RaisePropertyChangedINotifyPropertyChanged 인터페이스의 구현이며 다른 객체가 가입 할 수있는 이벤트를 정의합니다. 본질적으로 그것은 가입자가 속성의 변경을 알리는 이벤트를 얻을 것이고, 예를 들어 그에 따라 UI를 업데이트 할 수 있도록 가입자가 속성 값을 다시 읽게 될 가능성이 있음을 의미합니다. 다시뿐만 아니라 변경 사항을 반영 할 수있는 UI 있도록 자체에 대한 RaisePropertyChanged를 호출합니다 StartDateTime을 설정합니다 STARTDATE 또는 상영 중의 변형 때문에

private DateTime _startTime; 
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
     _startTime = value; 
     StartDateTime = StartDate.Add(_startTime.TimeOfDay) 
    } 
} 

private DateTime _startDate; 
public DateTime StartDate 
{ 
    get { return _startDate; } 
    set 
    { 
     _startDate = value; 
     StartDateTime = _startDate.Add(StartTime.TimeOfDay) 
    } 
} 

private DateTime _startDateTime; 
public DateTime StartDateTime 
{ 
    get { return _startDateTime; } 
    set 
    { 
     _startDateTime = value; 
     RaisePropertyChanged(() => StartDateTime); 
    } 
} 

:

다른 옵션이 될 것입니다.

+0

장래의 헤드 긁힘을 피하려면 ... RaisePropertyChanged (() => StartTime) 및 RaisePropertyChanged (() => StartDate)를 호출하는 것이 좋습니다. – Stuart

+0

좋은 지적입니다. INotifyPropertyChanged를 구현할 때 개인적으로 항상 모든 속성에 대해 이벤트를 발생시킵니다. 내가 선택한 속성 집합을 갖는 것이 나중에 확실히 두통을 줄 것이라고 생각합니다. –

관련 문제