如何在WPF应用程序中将参数传递给ViewModel的构造函数?

时间:2012-10-28 07:17:32

标签: c# wpf mvvm prism

我看到人们建议使用Messenger / EventAggregator在“当前”目标更改时将参数传递给ViewModel,但它对我的情况不起作用。

假设我有一个像这样的ViewModel类:

class CustomerViewModel
{
    CustomerViewModel(int customerId) {}
}

  1. 我同时在应用程序shell中有相同类型的视图。
  2. 对于每个视图,都有一个唯一的CustomerViewModel实例。每个CustomerViewModel实例可以具有不同的customerId。 (类似于Visual Studio IDE,打开了多个文档 同时)
  3. 我不想在我的View类中编写类似“this.DataContext = new CustomerViewModel(id)”的代码。什么是MVVM处理这种情况的方式?

    感谢。

1 个答案:

答案 0 :(得分:1)

有几种方法可以处理这种情况,首先 - 确定您是否使用View first or View Model first方法。

使用EventAggregator是一个有效的选项。

另一种选择是让ViewModel实现一个接口,然后使用IoC/DI之类的MEF或Unity来获取ViewModel的实例。使用此方法,您可以定义一个您知道ViewModel必须实现的Initalize(int Id)函数。 您不需要View了解CustomerViewModel类,只需要知道接口。

我应该注意,如果你使用某种 DI ,你总是可以将该参数注入ViewModel。在Unity中的IIRC可以在MEF中轻松完成(您只需注册该值,然后创建依赖于该类型的ViewModel)。