2014-04-13 3 views
1

에서 올바르게 모델과 viewmodels를 구현하고 몇 가지 문제에 직면하는 방법. 나는 특정 국가의 지방과 도시 목록을 저장하는 응용 프로그램을 만들고 있습니다. 이제 모델을 정확히 구현하는 방법을 알아야합니다.내가 MVVM 패턴을 배우기 시작했습니다 MVVM 패턴

나는 다음과 같이 데이터베이스의 테이블과 필드는 것을 말해야한다

:

테이블 : 지방 : ID, 이름

테이블 : 도시 ID, ProvinceID, 이름

지금 어떤 접근법이 모델에 더 좋을까요? 모델의 속성이 테이블의 필드와 정확히 일치해야합니까?

class Province { 

public uint ID {get; set;} 
public string Name {get; set;} 

}; 

class City { 
    public uint ID {get; set;} 
    public uint ProvinceID {get; set;} 
    public string Name {get; set;} 

} 

아니면 예를 들어 그 지방에 대한 참조가 할 수있는 수준의 도시에 대한 더 나은 :

class City { 
    public uint ID {get; set;} 
    public Province Province {get; set;} 
    public string Name {get; set;} 

} 

또는 더 나은 아이디어를 예를 들면?

무엇 viewmodels 어떻습니까? ProvinceViewModel에 CityViewModels 목록이 있어야하나요?

미리 감사드립니다. 문제를 명확하게 설명하지 않은 경우 알려 주시기 바랍니다.

+0

MVVM 모델에 대한 더 많은 이해가 필요합니다. 나는 몇몇 훌륭한 자원을 추천하는이 게시물을 살펴볼 것이다. 예제를 통해 대답을 찾을 수 있습니다. http://stackoverflow.com/questions/1405739/mvvm-tutorial-from-start-to-finish/2034333#2034333 – Mehrad

답변

1

Province을 수업의 구성원으로 사용할 수 있다면 왜 Province에 ID를 사용해야하나요?

그러므로 당신이 찾아 실제 이름을 얻을 수있는 Province를 먼저 구성해야합니다, 당신이 지방의 이름이 필요합니다 상상해보십시오. 즉, 그것은 전혀 필요하지 않습니다.

기본적으로 MVVM 패턴에 Model, ViewModelView이 있습니다. ViewViewModel과 상호 작용하고 그 반대의 경우도 마찬가지입니다. 또한 ViewModel은 변경하기 위해 Model을 사용합니다. 각 클래스에 대한 ViewModel를 사용하는 동안

당신은 Model로 수업을 모두 사용할 수 있습니다. INotifyPropertyChanged

class ProvinceViewModel : INotifyPropertyChanged 
{ 
    private Province _Province; 

    public string Name 
    { 
     get { return _Province.Name; } 
     set 
     { 
      if (_Name == value) return; 
      _Province.Name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

    public ProvinceViewModel(Province province) 
    { 
     _Province = province; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

주의 구현을 다음과 같이 Province에 대한 ViewModel을 구축 할 수 있습니다. 이제 왜 내가 그것을 구현했는지 물어볼 수 있습니다. 당신의 View를 업데이트하려면, 당신은이 인터페이스 메시지를 게시하고 View, 당신의 Model에 뭔가가 변경 통보를해야합니다.

방법 등 Caliburn.Micro 같은 프레임 워크를 사용하는 방법에 대해? 그것은 물론, 당신에게 많은 일을 안전하게하고 일단 그것에 들어가면 매우 편안 할 것입니다.

+0

Province 모델 자체의 각 단일 구성원보다는 ProvinceViewModel에 Province 구성원이있을 수 있습니까?실제로 자습서에서 지방 회원이 ViewModel에있는 CurrentProvince 또는 SelectedProvince라는 것을 보았습니다. 어떤 방법이 더 정확한가? – user3530012

+0

모델 구성원이 업데이트되었음을보기에 알리려면이 방법으로 각 구성원을 구현해야합니다. 수동으로 수행하지 않고도보기를 지속적으로 업데이트해야합니다. 원하는대로 이름을 붙일 수 있지만, 실제로는 DataGrid 또는 SplitButton과 같은 컨트롤의 현재 항목이나 선택된 항목을 나타내므로 'Current'또는 'Selected'라고합니다. – 0x8BADF00D

+0

그렇지만 모델이 INotifyPropertyChanged를 상속받지 않는 이유는 무엇입니까? – user3530012