我看到人们建议使用Messenger / EventAggregator在“当前”目标更改时将参数传递给ViewModel,但它对我的情况不起作用。
假设我有一个像这样的ViewModel类:
class CustomerViewModel
{
CustomerViewModel(int customerId) {}
}
和
我不想在我的View类中编写类似“this.DataContext = new CustomerViewModel(id)”的代码。什么是MVVM处理这种情况的方式?
感谢。
答案 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)。