不知怎的,2号路的感觉就像在街上尖叫一样只有一个人而不是直接跟他说话。另一方面,第2号方法的优势在于,如果我将来有其他与此操作相关的方法,我可以将它们签名到该事件而不是专门调用它们。
你会做什么?答案 0 :(得分:1)
方法1打破了MVVM原则,因为视图模型不应该知道视图。你的方法有点像MVP设计模式。
我想说方法2是更好的方法,对于查看视图模型的视图来说完全没问题。它还使您可以灵活地在引发该事件时执行任何操作,例如,如果您想使用其他视图并调用其他方法。
此外,可以使用良好的消息传递框架来完成此类事情。视图模型发布消息,视图订阅它。 mvvmlight框架工作有很好的实现,但我相信还有其他的。
答案 1 :(得分:0)
接受一个接口,从中实现视图。并通过传递此视图来实例化viewmodel。
让我们说 -
接口
public interface IFooView
{
...
}
查看
public Class FooView : IFooView
{
private FooViewModel _viewModel;
public FooView()
{
_viewModel = new FooViewModel(this);
}
}
视图模型
public class FooViewModel
{
private FooView _view;
public FooViewModel(IFooView view)
{
_view = view;
}
}
现在,您可以从View调用ViewModel,也可以从ViewModel调用。