WPF,MVVM,MasterDetailPage

时间:2012-01-15 18:12:45

标签: c# wpf mvvm

我有一个MasterPage UserControl,其中包含3个用户控件(和3个视图模型)

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

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

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

我可以用我在winforms中多次做过的事件来做,但我正在寻找mvvm模式的最佳实践方式。

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

非常感谢您的帮助

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:0)

选项很少:

  1. 您可以在视图中将SelectedItem声明为依赖项属性 模型类(如果它继承自DependencyObject)
  2. 您可以将SelectedItem声明为常规属性并创建视图模型 类实现INotifyPropertyChanged接口和fire setter中的PropertyChanged事件。
  3. WPF有许多新概念,但仍然通过事件与业务逻辑进行通信。