Messenger
에 대해 이야기하는이 post on SO을 살펴보십시오. 귀하의 경우에는 방문 개체를 게시하고 ViewModel 캡처를 표시합니다. 당신이 Model
데이터가 거의 수정을 많이하지 않고 View
에 직접 제공됩니다 매우 데이터 중심의 뷰가있는 경우
당신은 쉽게 ViewModel
에 속성으로 Model
을 노출하고 해당 속성에 View
바인딩을 가질 수 있습니다.
하나 View
가 Model
다른 View
년대는 Model
편집에 프로퍼티 변경 이벤트를 수신 할 필요없이 자동으로 업데이트됩니다 업데이트이 방법 :
내 두 번째 지점을 정교하게하려면 : 당신은 할 수있다 또는 이것을 필요로하지 않을 수도 있지만 Model
도 INotifyPropertyChanged
을 구현하는 경우 해당 모델의 변경 사항은 View
으로 자동 전달됩니다.
당신은 당신이 2 amounst 공유 같은 Visit
객체가 필요있을 경우에만 적용 말했듯이 당신이 직접 XAML
public class ViewModel1 : ViewModelBase
{
public ViewModel1(IMessenger messenger)
{
messenger.Register<Visit>(this, (v) => CurrentVisit = v);
}
public Visit CurrentVisit
{
get { _visit; }
set { _visit = value; RaiseNotifyPropertyChange("CurrentVisit"); }
}
}
public class ViewModel2: ViewModelBase
{
public ViewModel2(IMessenger messenger)
{
messenger.Register<Visit>(this, (v) => CurrentVisit = v);
}
public Visit CurrentVisit
{
get { _visit; }
set { _visit = value; RaiseNotifyPropertyChange("CurrentVisit"); }
}
}
public class CurrentVisit : INotifyPropertyChanged
{ ... }
으로 바인드 방문 속성을 가질 수있는 방문 개체와 2 개보기를해야하는 경우 ViewModel
s이고 View
의 대부분이 데이터 중심이거나 다른 말로하면 Model
의 데이터가 화면에 직접 표시됩니다. 이는 ViewModel
의 속성을 복제하지 않고 항상 속성 변경 이벤트를 발생시키지 않으려는 것입니다.
그 두 번째. MesageBus 접근 방식은 서로에게 알릴 필요가있는 분리 된 ViewModel이 많은 경우에 실제로 도움이 될 수 있습니다. – lbergnehr
고맙습니다. "이 방법으로 하나의보기가 모델을 업데이트하면 다른보기가 모델의 속성 변경 이벤트를 수신하지 않고도 자동으로 업데이트됩니다"- 정확히 어떻게 작동합니까? 예를 들어 보시거나 조금 정교하게 만드시겠습니까? – bebonham
ViewModel에 CurrentVisit라는 속성이 있고 모든 뷰에서 자동으로 업데이트하는 방법을 변경 한 경우 OnPropertyChanged를 호출해야합니까? 미안해, 이해가 안돼. – bebonham