C# 带参数的MVVMLight打开视图

C# 带参数的MVVMLight打开视图,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,我正在尝试学习MVVMLight,我一直在创建一个用于编辑对象的新视图 我有CustomersView和CustomersViewModel一起显示客户的数据网格。双击DataGridRow,我打开了一个CustomerView,它实现了一个CustomerViewModel来编辑客户,我正在CustomerViewModel中使用此代码: var cv=new CustomerView(); var cvm=new CustomerViewModel(); cvm.IsEdit = tr

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

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

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

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

请注意,如果在视图模型中实例化视图对象(如CustomerView),则应打破mvvm模式。这应该是一个问题,如果你的项目将增长

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

1) 创建一个像

interface INavigationService
{
    NavigateTo(string viewName ,objet params);
}
创建该类的单例实现。将tht创建新CustomerView()和其他视图的逻辑放在此方法中。主要目标是将视图与其他任何内容分开。尝试使用injection在viewmodels中只包含INavigationService引用

2) 为mvvm(如Prism)使用一个非常沉重的框架

编辑:mvvm ligth 5.0提供了自己的INavigationService接口。如果使用此版本,则可以决定实现它。它没有提供任何实现。。。
请参见Ba注意,如果在viewModel中实例化一个视图对象,如CustomerView,则应打破mvvm模式。这应该是一个问题,如果你的项目将增长

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

1) 创建一个像

interface INavigationService
{
    NavigateTo(string viewName ,objet params);
}
创建该类的单例实现。将tht创建新CustomerView()和其他视图的逻辑放在此方法中。主要目标是将视图与其他任何内容分开。尝试使用injection在viewmodels中只包含INavigationService引用

2) 为mvvm(如Prism)使用一个非常沉重的框架

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

我之前问过一个问题。您可以使用DI安装viewmodel,然后直接修改我之前询问的属性。您可以使用DI安装viewmodel,然后直接修改属性谢谢。实现是针对页面的。我将尝试了解如何使用该服务打开windows。谢谢。实现是针对页面的。我将尝试了解如何使用该服务打开windows。