【发布时间】:2013-02-14 22:57:57
【问题描述】:
我是 MVVM 和 WPF 的新手。
我正在使用 MVVM Light 制作一个应用程序,该应用程序在一个窗口中包含一个 DataGrid,该窗口具有一个视图模型 (MainViewModel) 和另一个用于在 DataGrid 中添加和编辑记录的窗口,该窗口也有自己的视图模型 (EditViewModel) .
我担心的是我用来从 MainViewModel 打开“添加/编辑”窗口的方法。在 MainViewModel 中,我有一个属性 SelectedItem,它绑定到 DataGrid 的 SelectedItem 属性和一个 IsEdit 布尔属性,指示是否应在添加或编辑模式下启动添加/编辑窗口。
当添加/编辑窗口在编辑模式下打开时,在其视图模型的构造函数中我有以下行:
MainViewModel mainViewModel = ServiceLocator.Current.GetInstance<MainViewModel>();
这显然会检索 MainViewModel 的当前实例,它工作得非常好,但我不确定这是不是最好的方法。
此外,如果我有多个主窗口实例,它们使用相同的 MainViewModel 实例,并且我从这两个实例中打开添加/编辑窗口的一个实例,则添加/编辑窗口将从MainViewModel 的同一实例,这可能是个问题。
如果我尝试为打开的每个 MainWindow 创建一个新的 MainViewModel 实例,那么我不知道如何将当前使用的 MainViewModel 的实例传递给 EditViewModel。
我希望我清楚我需要做什么。如果我遗漏了什么,请告诉我,我会补充:)
提前致谢
【问题讨论】:
标签: wpf datagrid viewmodel mvvm-light viewmodellocator