2012-09-16 2 views
0

다음 코드는 내 문제를 보여 피하기 위해 : 나는 PersonViewModelA 같은 것을 본 많은 예에서바인딩은 모델링 및 프록시 속성

public class Person : (INotifyPropertyChanged) // INPC only for PersonViewModelB 
{ 
    public string Name {get; set;} 
} 

public class PersonViewModelA : INotifyPropertyChanged 
{ 
    private Person _person {get; set;} 

    public string Name 
    { 
     get { return _person.Name; } 
     set { _person.Name = value; } 
    } 

    //XAML: {Binding Name} 
} 

public class PersonViewModelB : INotifyPropertyChanged 
{ 
    private Person Person {get; set;} 

    //XAML: {Binding Person.Name} 
} 

합니다. 나는 그 혜택을 이해하지 못한다. 나에게 PersonViewModelB는 훨씬 깨끗하고 훨씬 더 건조하다.

두 경우 모두보기 전용 입력란을 ViewModel (예 : IsSelected) 또는 계산 된 입력란 (예 : Name = FirstName + ""+ LastName)에 추가 할 수 있습니다. richt 도메인 모델이있는 경우 왜 그것을 뷰에 표시 할 수 있습니까?

Asp.net MVC에서 우리는 모델에 지시문을 바인딩하는 법을 배웠습니다. 거기에는 괜찮 았지만 WPF에서는 그렇지 않습니다. 왜?

추가 오버 헤드를 정당화하는 것은 무엇입니까?

답변

0

MVVM은 View-Model이없고 MVC와는 다르며 선보다 삼각형입니다. 모델에 직접 바인딩하지 않는 한 가지 이유는 종속성을 최소화하는 것입니다. 따라서 모델이 변경되면 VM 보기가 아닌 VM을 조정해야 할 수 있습니다.

0

기본 객체가 INotifyPropertyChanged을 지원하지 않기 때문에 또는 실제 구현시 유연성이 필요하기 때문에 A와 같은 접근법을 볼 때.

Person이 변경 될 수 있으며 UI를 다시 작성해야합니다. 그러나 논리가 다른 DLL에 상주하고 ViewModel을 프록시에 바인딩하는 시나리오에 대해 생각해보십시오. 그런 다음 모델이 변경되면 다시 UI를 다시 컴파일 할 필요가 없습니다.