C# WPF、MVVM、MasterDetailPage

C# WPF、MVVM、MasterDetailPage,c#,wpf,mvvm,C#,Wpf,Mvvm,我得到了一个MasterPage用户控件,其中包含3个用户控件和3个viewmodels MasterView: -> MenuView (-> MenuViewModel ) -> InfoView (-> InfoViewModel ) -> SliderView (-> SliderViewModel ) 在slider视图中,我得到了一个列表框,其中SelectedItem属性绑定到视图模型SliderViewModel中的SelectedIt

我得到了一个MasterPage用户控件,其中包含3个用户控件和3个viewmodels

MasterView:
 -> MenuView (-> MenuViewModel )
 -> InfoView (-> InfoViewModel )
 -> SliderView (-> SliderViewModel )
在slider视图中,我得到了一个列表框,其中SelectedItem属性绑定到视图模型SliderViewModel中的SelectedItem属性

当SelectedItem发生更改时,我希望将其一直冒泡到InfoViewModel并更新InfoView

我可以像在winforms中那样多次处理事件,但我正在寻找mvvm模式的最佳实践方式

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


非常感谢您的帮助

我不确定此场景中的最佳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;
        }
    }
}
没有多少选择:

您可以在视图中将SelectedItem声明为依赖项属性 模型类,如果它是从DependencyObject继承的 您可以将SelectedItem声明为常规属性,并使您的视图成为模型 类来实现INotifyPropertyChanged接口和fire setter中的PropertyChanged事件。 WPF有很多新概念,但仍然通过事件与业务逻辑通信