【问题标题】:How do I navigate from a ViewModel?如何从 ViewModel 导航?
【发布时间】:2012-03-07 09:55:46
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: wpf mvvm navigation


    【解决方案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}" />
    

    这样您就不需要混淆视图和视图模型,也不需要从虚拟机创建视图。实际上,在我的情况下,是子页面请求通过事件更改视图。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 2013-12-09
        • 1970-01-01
        相关资源
        最近更新 更多