任何人都可以在以下情况中建议解决方案:
我有一个MVVM应用程序,我需要在主窗口中显示模态窗口,以便为viewModel类中的Collection添加一些值。这样做的最佳方法是什么。我的意思是。我需要在viewModel中更改一些集合,My MainWindow引用了viewMode。
viewModel = new ExamViewModel();
this.DataContext = viewModel;
将viewmodel暴露给子窗口是否足够好?或者有“正确”的方式来做到这一点。
答案 0 :(得分:1)
通常,模态窗口只会知道有问题的对象,允许用户填写新对象(也可能编辑现有对象)。然后它会将填充的对象传递回父级,后者负责更新集合。
答案 1 :(得分:0)
正如@Marcelo建议的那样,打开新子窗口的代码应该与ViewModel中的一些委托一起传递。该委托将创建一个子ViewModel(比如说ChildVM
),并使用自己的集合(ChildCollection
)填充其中一个属性(比如ParentVM.ParentCollection
)。
var childVM = new ChildVM();
childVM.ChildCollection = parentVM.ParentCollection.ToList();
return childVM;
然后您的子窗口将绑定到新填充的集合(ChildVM.ChildCollection)属性,并在执行“OK”/“SAVE”类型的肯定操作后,关闭的子窗口应该通知/委托回到父视图模型将变化“合并”回旧集合......就像这样......
parentVM.ParentCollection.Clear();
parentVM.ParentCollection.AddRange(ChildVM.ChildCollection);
这样