2011-04-28 9 views
8

View, ViewModel 및 사용자 정의 유형 클래스가있는 간단한 시나리오가 있습니다. 내가 바인딩 된 텍스트 상자를 내보기에서MVVM 모델 - ViewModel 통신

private Model.Person person; 

     public Model.Person Person 
     { 
      get 
      { 
       return person; 
      } 
      set 
      { 
       this.person= value; 

       this.RaisePropertyChanged("Person"); 
       this.SavePersonCommand.OnCanExecuteChanged(); 
      } 
     } 

: 나는 사람 속성이

public class Person : Validation.DataError, INotifyPropertyChanged 
{ 
    #region INotifyProperty 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 


    public global::System.String name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name= value; 
      RaisePropertyChanged("name"); 
     } 
    } 
    private global::System.String _name; 

}

뷰 모델에서 :

모델 클래스

은 같은 것입니다 Person.name

따라서 ViewModel이 se를 실행하지 않습니다. t 메서드인데, 이는 Person 개체가 여전히 동일하기 때문에 ... 모델 속성에서 set 메서드를 실행하고 있기 때문입니다.

사용자가 사람 이름을 변경하고 다른 방법 (웹 서비스 및 기타 자료 검색 ...)으로 전화를 걸려면이 기능이 ViewModel에 있어야한다고 생각합니다.

MVVM Light 툴킷의 Messenger를 사용하여 여러 뷰 모델 간 및 뷰와 뷰 모델 간 통신을하고 있습니다.

중재자를 사용해야하는지, 아니면이를 해결할 다른 방법을 알아야할지 모르겠다.

+0

보인다. 유효성 검사/INotifyPropertyChanged 등을 구현하는 것을 볼 수 있습니다. 어쩌면 Csla.Net을 체크 아웃하고 싶을 것입니다. 훌륭한 모델을 만들 수있는 프레임 워크를 제공 할뿐만 아니라 지원하는 다양한 UI (기본적으로 모든 UI)에 대한 도움을 제공합니다. http://www.lhotka.net/cslanet/ – Andy

+0

제안 해 주셔서 감사합니다 .- – zapico

답변

14

은 당신의 ViewModel에있는 사람의하여 PropertyChanged 이벤트에 등록하고 "이름"속성을 확인하거나 싶어 무엇 이건 : 당신이 좋은 길을 가고있는 것처럼

Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged); 

void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    if(e.PropertyName == "Name") 
    { 
     //do something 
    } 
} 
+1

이것이 길입니다. – Andy

+1

너무 간단했습니다! 도움을 주셔서 감사합니다 : - D – zapico

+1

나는이 동일한 문제를 찾고 있었고 ViewModel 종속성 속성을 제공하여 ViewModel 속성과 ViewModel 속성을 View 속성에 바인딩 할 수 있도록해야한다고 생각했습니다. 그것은 털이 많은 혼란으로 바뀌고 여전히 작동하지 않았습니다. 귀하의 대답은 번거로운 번거 로움없이 모델 변경 사항을 GUI로 전달하는 매우 간단한 방법입니다. 이 똑바로 대답 주셔서 감사합니다! –

관련 문제