7

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

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

class CustomerViewModel
{
    CustomerViewModel(int customerId) {}
}

和:

  1. 我同时在应用程序外壳中拥有相同类型的视图。
  2. 对于每个视图,都有一个唯一的 CustomerViewModel 实例。每个 CustomerViewModel 实例可以有不同的 customerId。(类似于Visual Studio IDE,同时打开多个文档)

我不想在我的视图类中编写像“this.DataContext = new CustomerViewModel(id)”这样的代码。处理这种情况的 MVVM 方法是什么?

谢谢。

4

1 回答 1

1

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

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

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

我应该注意,如果您使用某种DI,您始终可以将该参数注入 ViewModel。在 Unity 中的 IIRC 这可以比在 MEF 中更容易完成(您只需注册值,然后创建取决于该类型的 ViewModel)。

于 2012-10-28T08:10:09.697 回答