我正在尝试学习MVVMLight,并且被困在创建用于编辑对象的新视图中。
我有CustomersView
和CustomersViewModel
,它们与客户一起显示数据网格。双击DataGridRow时,我打开一个实现CustomerView
来编辑客户的CustomerViewModel
,并在CustomersViewModel
中使用此代码:
var cv=new CustomerView();
var cvm=new CustomerViewModel();
cvm.IsEdit = true;
cvm.Customer = customer;
cv.DataContext = cvm;
cv.ShowDialog();
这是一个不好的方法吗?创建视图并用一些参数实例化视图模型的最佳方法是什么?
答案 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