2013-09-27 3 views
4

다음과 같은 방법으로 클래스 구조 설정을했습니다. 모델의 속성이 변경되면 RaisePropertyChanged 이벤트가 호출되지 않습니다. 어쨌든이 문제가 있습니까? 아니면 ViewModel 내부의 복잡한 속성을 평평하게 처리해야합니까?하위 속성을 변경할 때 RaisePropertyChanged 트리거 - MvvmCross

Class ViewModel 
{ 
    public Model model { 
        get { return _Service.GetModel();} 
        set { _Service.SetModel(); RaisePropertyChanged(() => Model); 
        } 
} 

class Model 
{ 
    public string A {get;set;} 
} 

Class Service 
{ 

} 
+0

모델 인스턴스의 속성 'A'가 변경되면 '모델'의 'RaisePropertyChanged'가 실행되지 않습니다. –

답변

7

나는 주위에 쉬운 길은 없다고 생각합니다.


INotifyPropertyChanged을 지원하므로 어느 쪽이든 당신이 모델을 변경할 수 있습니다 - 예를 들어, 나는 유래 라이브러리를 사용하는 경우

class Model : MvxNotifyPropertyChanged 
{ 
    public string A { 
     get { return _a; } 
     set { _a = value; RaisePropertyChanged(() => A); } 
    } 
} 

나는이 첫 번째 방법을 사용했습니다 - http://stacky.codeplex.com/SourceControl/latest#trunk/source/Stacky/Entities/Answer.cs


같은 모델 엔티티를했다 ... 또는 다른 INotifyPropertyChanged 클래스 모델을 포장 할 수 있습니다

class ModelWrapper : MvxNotifyPropertyChanged 
{ 
    private readonly Model _m; 
    public ModelWrapper(Model m) 
    { _m = m; } 

    public string A { 
     get { return _m.A; } 
     set { _m.A = value; RaisePropertyChanged(() => A); } 
    } 
} 

필자는 Model 클래스를 제어하지 못했을 때이 접근법을 사용했습니다.


... 또는 접근의 확장으로, 당신은 부모의 ViewModel까지 속성을 평평하게 할 수 있습니다 단지 몇가있는 경우에만 때이 방법을 사용했습니다

class MyViewModel : MvxViewModel 
{ 
    private readonly Model _m; 
    public ModelWrapper(Model m) 
    { _m = m; } 

    public string A { 
     get { return _m.A; } 
     set { _m.A = value; RaisePropertyChanged(() => A); } 
    } 
} 

걱정할 속성.


전체 ... 뷰 모델이 Model of the View있을 것입니다 기억 -이 모델 객체로/속성 값을 복사 OK입니다.

+0

감사합니다. 스튜어트! 이 문제를 해결하기 위해 마법의 MvvmCross 실버 총알이 필요했습니다. :) – Brenton

+0

그냥 구문에 문제가 있다면 Fody - http://twincoders.com/blog/codigo-limpio-con-fody/ 또는 Rio - http://slodge.blogspot.co를 고려해보십시오. .uk/2013/07/n36-rio-binding-carnival.html – Stuart

관련 문제