【问题标题】:Proper MVVM way to pass info from parent to child view models将信息从父视图模型传递到子视图模型的正确 MVVM 方式
【发布时间】:2012-05-05 11:46:54
【问题描述】:

我正在使用 WPF 开始一个新的 MVVM 项目,这两个我都不熟悉,并且想确保我使用的是正确的 MVVM 方法。

我有以下几点:

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

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

【问题讨论】:

    标签: mvvm


    【解决方案1】:

    当涉及到TabControls 等时,我倾向于将子视图模型放在MasterViewModel 的集合中

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

    当您的 ID 被设置或您的子视图模型被创建时,您可以在它们上设置属性

    public int MasterId
    {
        get { return _masterId; }
        set { _masterId = value;
              foreach(var vm in Tabs)
                 vm.MasterId = value; 
              NotifyPropertyChanged("MasterId");  
            }
    }
    

    【讨论】:

    • 这听起来是个不错的解决方案。但是有一个问题,这将表明我对 WPF 缺乏经验,如何将 ViewModelBase 视图模型映射到显示在不同选项卡中的子用户控件数据上下文?目前,我的选项卡在 设计时 由我的“子”用户控件填充,因此我的 MasterViewModel 中不能有与您在回答中建议的 ObservableCollection 等效的内容。我应该如何更改我的设计以使其符合您的建议?非常感谢。
    • 查看使用数据模板的答案。 stackoverflow.com/a/5651542/373706。如果您想在设计时查看控件,则可以使用 d:DataContext 方法,在该方法中构建仅设计时的视图模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2011-02-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多