我正在为大学项目编写一个小型的人工WPF应用程序,我正借此机会学习MVVM模式。我已经实现了我的初始启动窗口,它将是一个登录页面。
我已将登录按钮绑定到我从ICommand派生的命令,该命令是使用LoginViewModel注入的。然后,LoginViewModel通过我创建的WCF服务验证客户。
我的问题是,一旦viewmodel收到验证正确的通知,我该如何从viewmodel导航到下一页/窗口?我不想在viewmodel中创建新窗口的实例。我应该在这里使用页面吗?我很想从一开始就了解最佳实践,我不想浪费时间去学习这种不好的方法。
感谢。
答案 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
时再次销毁它(并创建您需要的任何新视图)。