在MVVM中,谁负责控制新视图(当前视图或其ViewModel)的创建?

时间:2011-01-20 21:48:45

标签: view viewmodel mvvm

情境:
- 该应用程序加载ViewA及其相关的ViewModelA -ViewA有一个按钮,命令绑定到ViewModelA上的命令 -ViewModelA处理命令,应创建并显示ViewB的实例
问题是,谁应该负责创建ViewB的实例?

ViewModel不应该对Views有任何了解,这似乎是合理的,所以我看到了几种可行的可能性:
1)ViewModelA可以设置ViewA监视的属性,以便ViewA知道创建ViewB的实例。但这似乎会给ViewA带来太多责任
2)您可以将某种ViewManager服务注入ViewModelA,当它处理来自ViewA的命令时,它可以使用命令参数将某种适当的元数据传递到ViewManager的LoadView(元数据)方法中。

1 个答案:

答案 0 :(得分:0)

从arconaut看answer(即使当时不是接受的答案,它似乎是最干净的方法:

  • 在ViewModel中,使用某种Mediator模式(或类似EventAggregator)来“发布”CreateView消息
    • 在某个地方有一个类,叫做ViewManager,它的责任是对所有CreateView消息负责,并实例化相应的视图

这几乎就像你的第二个提案,只是松散耦合。