2012-01-15 70 views
0

我有一个母版用户控件,其包含3个用户控件(和3周的ViewModels)WPF,MVVM,MasterDetailPage

MasterView: 
-> MenuView (-> MenuViewModel) 
-> InfoView (-> InfoViewModel) 
-> SliderView (-> SliderViewModel) 

在滑块视图我得到与SelectedItem属性列表框在视图模型绑定到一个SelectedItem属性( SliderViewModel)

当SelectedItem发生变化时,我想将它一直泡到InfoViewModel并更新InfoView。

我可以做像事情一样,我在winforms做了很多次,但我正在寻找mvvm模式的最佳实践方式。

另一个小问题是,我应该为MasterView页面创建一个viewmodel吗?尽管除了将3个用户控件组合在一起之外,它不包含任何内容

您的帮助将不胜感激

回答

0

我不知道在这种情况下最好的MVVM最佳实践,但我能想到的通过MVVM这样做的一种方式。

您可以创建MasterViewModel并在masterViewModel中公开其他视图模型间通信的属性。像下面

class MasterViewModel 
{ 
    MenuViewModel; 
    InfoViewModel; 
    SliderViewModel; 

    public CommunicationProperty 
    { 
     set 
     { 
     InforViewModel.SomeProperty = value; 
     } 
    } 
} 

class SliderViewModel 
{ 
    pubic SliderViewModel(MasterViewModel masterViewModel) 
    { 
     //hold reference of master view model in a variable 
    } 

    public SelectedItem 
    { 
     set 
     { 
      // change the info view model via master view model 
      masterViewModel.CommunicationProperty = value; 
     } 
    } 
} 
0

有几个选项:

  1. 您可以宣布的SelectedItem为您的视图 模型类依赖属性(如果它继承自DependencyObject)
  2. 您可以宣布的SelectedItem定期性能,使您的视图模型 类实现INotifyPropertyChanged接口和消防 PropertyChanged事件的制定者。

WPF有许多新的概念,但仍然通过事件与业务逻辑进行通信。