【问题标题】:MVVMLight open view with parameter带参数的 MVVMLight 打开视图
【发布时间】:2018-12-31 07:31:43
【问题描述】:

我正在尝试学习 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();

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

【问题讨论】:

  • 我之前问过similar question。您可以使用 DI 设置您的视图模型,然后直接修改属性

标签: c# wpf mvvm-light


【解决方案1】:

请注意,如果您在 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

【讨论】:

  • 谢谢。该实现是针对页面的。我将尝试了解如何使用该服务打开窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
相关资源
最近更新 更多