将信息从父视图模型传递到子视图模型的正确MVVM方法

将信息从父视图模型传递到子视图模型的正确MVVM方法,mvvm,Mvvm,我正在使用WPF启动一个新的MVVM项目,这两个项目我都不熟悉,我希望确保我使用了正确的MVVM方法 我有以下资料: 我有一个主用户控件,它包含自己的ViewModel和TabControl 每个选项卡都包含一个单独的用户控件及其自己的ViewModels 创建MasterViewModel时,会设置它的一个属性(我们称之为MasterId) 我需要将MasterId属性更改从主视图模型传播到子视图模型 我想知道实现这个简单场景的最简单/最好/合适的MVVM方法是什么?当涉及到TabCont

我正在使用WPF启动一个新的MVVM项目,这两个项目我都不熟悉,我希望确保我使用了正确的MVVM方法

我有以下资料:

  • 我有一个主用户控件,它包含自己的ViewModel和TabControl
  • 每个选项卡都包含一个单独的用户控件及其自己的ViewModels
  • 创建MasterViewModel时,会设置它的一个属性(我们称之为MasterId)
  • 我需要将MasterId属性更改从主视图模型传播到子视图模型

我想知道实现这个简单场景的最简单/最好/合适的MVVM方法是什么?

当涉及到
TabControl
s等时,我倾向于将子视图模型放在
MasterViewModel

 public ObservableCollection<ViewModelBase> Tabs { get; private set; }

这听起来是一个很好的解决方案。不过,有一个问题表明我对WPF缺乏经验,那就是如何将ViewModelBase视图模型映射到显示在不同选项卡中的子用户控件数据上下文?目前,我的选项卡在设计时由我的“子”用户控件填充,因此我不能像您在回答中所建议的那样,在我的MasterViewModel中使用等效的ObservableCollection。我应该如何改变我的设计,使之符合你的建议?非常感谢。看看这个关于使用数据模板的答案。如果希望在designtime中查看控件,则可以使用
d:DataContext
方法,在该方法中构建仅限designtime的viewmodel。
public int MasterId
{
    get { return _masterId; }
    set { _masterId = value;
          foreach(var vm in Tabs)
             vm.MasterId = value; 
          NotifyPropertyChanged("MasterId");  
        }
}