有没有办法简单地使用相同的视图模型在不同的视图之间进行交换?
我希望能够让用户导航到同一视图模型的不同视图。
根据我到目前为止发现的示例,我使用导航服务在视图之间切换,将ID传递给URI,以便目标VM知道要加载的记录。
不同的渲染是通过绑定在XAML上的辅助转换对象来完成的,因此VM基本上是围绕模型和一些导航功能的薄包装。
另一种导航方法是在同一视图上使用不同的渲染并折叠未使用的视图,直到它们被使用,但这会使视图更加复杂,并且会将不同的渲染从导航堆栈中取出。 / p>
由于视图之间的VM几乎相同,因此只更换视图而不是根据ID存储/重新加载对象更有意义。
操作假设是每个视图需要一个单独的VM,或者每个视图至少需要一个VM的单独实例,并且每个VM都无法访问前一个VM的上下文,除了在该视图上传递的内容导航查询字符串参数。
回顾一下: 1)我可以在不丢失数据上下文的情况下在VM上交换视图吗?
或 2)我可以在导航到事件时访问以前的VM吗?
更新: 更多信息 - >)从Mix11 Deep Dive Navigation示例中 - 使用导航查询上传递的ID作为密钥从SimpleIOC检索VM,并将DataContext设置为它。这类似于在存储中存储/检索数据对象并基于密钥检索它。这是在目标页面代码隐藏中的OnNavigated事件处理程序中。
答案 0 :(得分:0)
多个视图不需要ViewModel的单独实例,您可以非常乐意在多个视图之间共享相同的ViewModel(例如单个)。但是,您必须注意,更改此共享ViewModel的属性也会影响其他视图。
此外,您还可以将模型作为单例存取,并让多个ViewModel绑定到此实例。
所以对于你的问题:
您必须导航到View,但这可以绑定到单个ViewModel。
好吧,如果你所有的ViewModel都是单身人士,你可以。但你想要它吗?就个人而言,我认为最好分享模型。