带有参数的MVVMLight打开视图

时间:2018-07-23 19:12:32

标签: c# wpf mvvm-light

我正在尝试学习MVVMLight,并且被困在创建用于编辑对象的新视图中。

我有CustomersViewCustomersViewModel,它们与客户一起显示数据网格。双击DataGridRow时,我打开一个实现CustomerView来编辑客户的CustomerViewModel,并在CustomersViewModel中使用此代码:

 var cv=new CustomerView();
 var cvm=new CustomerViewModel();
 cvm.IsEdit = true;
 cvm.Customer = customer;
 cv.DataContext = cvm;
 cv.ShowDialog();

这是一个不好的方法吗?创建视图并用一些参数实例化视图模型的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

请注意,如果您在viewModel中实例化诸如CustomerView之类的视图对象,则应破坏mvvm模式。如果您的项目会发展,那应该是一个问题。

如果您绝对想保留mvvm模式,则有两个选择:

1)创建一个类似

的界面
interface INavigationService
{
    NavigateTo(string viewName ,objet params);
}

创建此类的单例实现。将逻辑放在此方法中创建新的CustomerView()和其他视图。主要目标是将视图与其他任何视图分开。尝试使用注入在视图模型中仅包含INavigationService引用。

2)对mvvm使用非常重的框架,例如Prism;

编辑:mvvm ligth 5.0提供了自己的INavigationService接口。如果您正在使用此版本,则可以决定实施它。它没有提供任何实现... 参见MVVM Light 5.0: How to use the Navigation service