2017-03-22 1 views
1

ReactiveUI에서 ViewModel (ReactiveObject) 뒤에 모델 (INotifyPropertyChanged)이 있으면 무엇이 가장 좋습니까?모델을 ViewModel에 바인딩하는 방법

private Model model; 
public string Minky 
{ 
    get { return model.Minky; } 
    set 
    { 
     model.Minky = value; 
     this.PropertyChanged(); 
    } 
} 

또는 내가 개별 속성을 결합해야합니다 : 나는 속성의 게터의 모델과 세터를 사용하십니까

private string minky; 
public string Minky 
{ 
    get { return minky; } 
    set { this.RaiseAndSetIfChanged(ref minky, value); } 
} 

public ViewModel(Model model) 
{ 
    if (model != null) 
    { 
    model.WhenAnyValue(x => x.Minky).BindTo(this, x => x.Minky); 
    } 
} 

두 번째 버전 (난 아직도 속성 때를 설정할 수 있습니다 좋은 아이디어처럼 보인다 모델이 없습니다). 이것이 나쁜 생각 인 이유가 있습니까?

답변

1

MVVM 바인딩 패턴에서 "보기"를 "ViewModel"에 바인드하는 것이 가장 좋습니다. 모델은 여기에 사용되지 않습니다. 물론 모델은 데이터 액세스 및 비즈니스 계층에서 db에 레코드 또는 웹 서비스로 전달하지만 바인딩에서는 수행하지 않습니다.

바인딩 된 이유로 캡슐화 된 모델을 사용하려는 경우 고유 한 PropertyChanged 알림이있는 바인딩 가능한 개체로 모델을 만든 다음 바인딩해야합니다. 이처럼 :

당신은 당신의 ViewModel

private Model model; 
public Model Model 
{ 
    get { return model; } 
    set 
    { 
     model = value; 
     this.PropertyChanged(); 
    } 
} 

Model을 그리고 그래서를 요약 특성

this.Bind(ViewModel, x => x.Name, x => x.Model.Minky); 

바인딩 : 그것은 나쁜 생각입니다. 그러나 원하는 경우 ViewMdel 내부의 모델 인스턴스에 직접 바인드해야합니다.

+0

감사합니다. 즉, ViewModel에서 뷰와 관련된 특수 필드를 유지할 수 있지만 모델 – Mitkins

+0

을 직접 참조하여 상용구 코드는 피하십시오. WPF 및 Xamarin과 같은 다른 모든 MVVM 패턴 플랫폼에서도 이와 동일합니다. – Emad

관련 문제