2010-02-24 6 views
4

Webservices와 내 모델 (자체 스레드)이 통신하고 데이터 객체를 노출하는 데이터베이스가 있습니다. 내 UI 응용 프로그램은 다른보기 및 ViewModels 및 사용자 지정 컨트롤로 구성됩니다. ServiceProvider (IServiceProvider)를 사용하여 모델에 액세스하고 이벤트를 UI 스레드로 라우팅합니다. ViewModels 간의 통신은 Messenger에 의해 전달됩니다.MVVM 패턴을 사용하여 모델에 액세스하는 가장 좋은 방법은 무엇입니까

이 방법이 있습니까?

나는 또한 내가 계층 구조를 가지고 있지만 아이들 목록 ObservableCollection에의 유형 비록 INotifyProperty를 지원하지 않는 데이터 객체를 가지고있는 순간에 데이터 객체

를 strucutre 수있는 가장 좋은 방법이 무엇인지 궁금 해서요. 나는 속성에 notifypropertychange를 구현할 가능성이 없다.

MVVM을 친숙하게 만드는 가장 좋은 방법은 궁금합니다. 부분 클래스를 구현하고 필요한 모든 속성 또는 명령을 추가하거나 모든 DataObject를 래핑하고 Model 목록과 MVVM 목록을 동기화 된 상태로 유지합니다.

모든 생각과 아이디어는 높이 평가됩니다.

답변

1

엄밀히 말하면 MVVM을 구현한다는 것은 뷰에 사용될 모든 DataObject (모델)를 표시하는 ViewModel 클래스를 만들어야한다는 것을 의미합니다. 뷰는 모델에 직접 액세스 할 수 없어야합니다.

이렇게하면 ViewModel을 완벽하게 제어 할 수 있으며 INotifyPropertyChange 이벤트를 구현하고 각 변경 알림 또는 특정 작업에 따라 ViewModel을 모델과 동기화 할 수 있습니다.

1

나는 많은 사람들이 엄격하게 패턴을 구현하지 않는다는 Bermo의 의견에 동의 할 것이다. Model 객체를 직접 노출하고 해당 객체에 INotifyPropertyChanged를 구현할 수 있습니다.

class PersonViewModel : INotifyPropertyChanged 
{ 
    Person p = new Person(); 

    public string First 
    { 
     get { return p.First; } 
     set 
     { 
      p.First = value; 
      onPropertyChanged("First"); 
     } 
    } 

    public string Last 
    { 
     get { return p.Last; } 
     set 
     { 
      p.Last = value; 
      onPropertyChanged("Last"); 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void onPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged!=null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName); 
     } 
    } 

    #endregion 
} 

내가 개인적으로 내가 거기 내에서 INotifyPropertyChanged 코드를 삽입 할 수 있도록에서 상속하지 반복에 넣어해야하는 뷰 모델 클래스를 생성 : 그러나 아래의 기본 당신이 지금까지 무엇을 구현하는 데 사용할 수있는 의미입니다 . 그럼 내 구현은 단순히 그 기본 클래스에서 상속.

+0

일부 외부 코드가 모델을 변경하면보기 모델을 동기화 상태로 유지하는 방법은 무엇입니까? – angularsen

관련 문제