我有一个可以创建另一个ViewModel的ViewModel。
我想将此ViewModel设置为现有View的数据上下文,然后导航到该视图。
private void CreateNewOrder()
{
var order = new OrderViewModel(new Order(){/* setup some things */});
// another ViewModel subscribes to MyCustomEvent
this.eventAggregator.GetEvent<MyCustomEvent>().publish(order);
this.regionManager.RequestNavigate("DetailRegion", new Uri("OrderView", UriKind.Relative));
}
问题是......
这是紧耦合吗?
我花了一些时间查看Prism Quickstart项目并找到了“控制器”或太复杂的东西。
我只想简化解耦View-ViewModel。
答案 0 :(得分:9)
您添加到ViewModel的代码属于控制器。
那么这张照片中缺少什么? - 控制器发布和侦听事件并获取数据 来自模型的ViewModel。他们还控制导航。
它应该被设计为MVCVM。通过缺少控制器类,我看不到MVVM的误用。再给Prism Quickstart吧。
为了澄清控制器如何适应MVVM图片,这是一个例子 情形:
- Controller由模块或app *注册并初始化。
- Controller订阅“显示详细信息”消息。
- Controller收到“显示详细信息”消息。
- Controller构建一个“详细信息”VM,用数据填充它并将任何ICommand属性分配给控制器中的代码(例如,几乎所有应用程序) 逻辑在控制器中。)
- Controller触发显示相应视图,为VM提供。
- 查看数据绑定到VM。按钮绑定到VM中的ICommands。
- 用户编辑数据并点击提交。提交代码位于Controller中,并决定如何处理VM中的新数据。
*注意:VM和视图不需要等待消息,因此在应用程序的生命周期中只需要存在控制器(即占用空间非常小)。这非常适合移动应用,对于任何应用来说都是一件好事。