带参数的 MVVMLight 打开视图

MVVMLight open view with parameter

我正在尝试学习 MVVMLight,但我一直在创建用于编辑对象的新视图。

我有 CustomersViewCustomersViewModel 显示客户的数据网格。双击 DataGridRow,我打开一个实现 CustomerViewModelCustomerView 来编辑客户,我在 CustomersViewModel:

中使用此代码
 var cv=new CustomerView();
 var cvm=new CustomerViewModel();
 cvm.IsEdit = true;
 cvm.Customer = customer;
 cv.DataContext = cvm;
 cv.ShowDialog();

这种方法不好吗?创建视图、使用某些参数实例化视图模型的最佳方法是什么?

Ba 意识到,如果您在 viewModel 中实例化一个视图对象,例如 CustomerView,您将打破 mvvm 模式。如果您的项目会增长,那应该是个问题。

如果你绝对想保持 mvvm 模式,你有两个选择:

1) 创建一个类似

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

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

2) 像Prism这样的mvvm使用非常重的框架;

编辑:mvvm ligth 5.0 提供了自己的 INavigationService 接口。如果您使用此版本,您可以决定实施它。它不提供任何实现... 见