繁体   English   中英

如何在视图模型之间切换视图?

[英]How can I switch views between viewmodels?

我的主窗口定义了应用程序的标记,对于这种特定情况,可以说我有一个包含2列的网格。
第一列将具有导航链接,第二列将显示不同的视图。
在mainwindow xaml中定义了2个视图(和2个视图模型):

<Window.Resources>       
   <DataTemplate DataType="{x:Type vm:Window1ViewModel}">
       <vw:Window1View/>
   </DataTemplate>
   <DataTemplate DataType="{x:Type vm:Window2ViewModel}">
       <vw:Window2View/>
   </DataTemplate>      
</Window.Resources>

在第二个显示我得到的视图的网格列中:

<ContentControl  Content="{Binding Path=ViewModel}" HorizontalAlignment="Left">                    
</ContentControl>

其中ViewModel是我要设置为要显示的view(viewmodel)的属性。

喜欢 :

ViewModel =新的Window1ViewModel();
(将mainwindowview的datacontext设置为MainWindowViewModel)

因此,在MainWindowViewModel的视图之间切换是没有问题的。

我的问题是如何在Window1ViewModel内切换到Window1ViewMode2?

各种ViewModel都不“了解”其他ViewModel。
只有MainWindowViewModel知道其他人...

我该如何解决? 也许我应该定义一个自定义事件(带有参数),MainWindowViewModel将订阅,其他视图模型将触发它,然后MainWindowViewModel将切换到所需的视图?

您描述的解决方案是一种可能性。 我能想到的另一个方法是使用某种导航服务(静态类或传递给所有视图类的接口-Viewmodels)来完成这种工作。

如果您的MainWindowViewModel创建了所有其他窗口,我将坚持使用界面解决方案。 例如,您可以让MainWindowVM实现这样的接口,并在创建时将其注入所有child-vm中。 这与您的事件处理方法几乎相同,但是除了提供子项和主要订阅服务外,您还可以主要提供一些东西……恕我直言,更好的方法。

好吧,也许我理解您的意思了。 您希望该控制器实际上是modelview,它将必须与其他人交换的事实通知mainmodelview。

考虑到我们正在谈论WPF,请在mainmodelview上创建DependecyProperty,然后从childview进行设置,这在后面的代码中将触发modelviews交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM