我看到人们建议使用Messenger/EventAggregator在"当前"目标更改时将参数传递给ViewModel,但它对我的情况不起作用.
假设我有一个像这样的ViewModel类:
class CustomerViewModel
{
CustomerViewModel(int customerId) {}
}
Run Code Online (Sandbox Code Playgroud)
和:
我不想在我的View类中编写类似"this.DataContext = new CustomerViewModel(id)"的代码.什么是MVVM处理这种情况的方式?
谢谢.
有几种方法可以处理这种情况,首先 - 决定您使用的是视图优先还是视图模型优先方法。
使用 EventAggregator 是一个有效的选项。
另一种选择是让 ViewModel 实现一个接口,然后使用一些IoC/DI(例如MEF或 Unity)来获取 ViewModel 的实例。使用此方法,您可以定义一个Initalize(int Id)您知道 ViewModel 必须实现的函数。您不需要视图知道 CustomerViewModel 类,只需知道接口即可。
我应该注意,如果您使用某种DI,您始终可以将该参数注入到 ViewModel 中。在 Unity 中的 IIRC 比在 MEF 中更容易完成(您只需注册该值,然后创建依赖于该类型的 ViewModel)。