如何从ViewModel导航?

时间:2012-03-07 09:55:47

标签: wpf mvvm navigation

我正在为大学项目编写一个小型的人工WPF应用程序,我正借此机会学习MVVM模式。我已经实现了我的初始启动窗口,它将是一个登录页面。

我已将登录按钮绑定到我从ICommand派生的命令,该命令是使用LoginViewModel注入的。然后,LoginViewModel通过我创建的WCF服务验证客户。

我的问题是,一旦viewmodel收到验证正确的通知,我该如何从viewmodel导航到下一页/窗口?我不想在viewmodel中创建新窗口的实例。我应该在这里使用页面吗?我很想从一开始就了解最佳实践,我不想浪费时间去学习这种不好的方法。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以更改视图模型并使用ContentControl将视图模型绑定到特定视图,而不是更改视图:在其他视图之上创建主视图,这将通过命令管理视图更改(在此示例中设置CurrentViewModel来自你的命令处理程序):

    <UserControl.Resources>
        <DataTemplate DataType="{x:Type vm:LoginViewModel}">
            <local:LoginView/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:FirstPageViewModel}">
            <local:FirstPageView/>
        </DataTemplate>
    </UserControl.Resources>
    <ContentControl Content="{Binding Path=CurrentViewModel}" />

这样您就不需要混淆视图和ViewModel,也不需要从VM创建视图。实际上在我的情况下,它是一个子页面,它通过事件请求视图更改。

答案 1 :(得分:0)

我没有完成页面,但是对于您的登录屏幕,我的LoginViewModel会公开LoggedInEvent

然后,您可以让父ViewModel创建LoginViewModel并在引发LoggedInEvent时再次销毁它(并创建您需要的任何新视图)。