gpt4 book ai didi

c# - 根据 subview 模型更改 wpf 单页应用程序中的 View

转载 作者:行者123 更新时间:2023-12-03 10:52:44 27 4
gpt4 key购买 nike

我在 wpf 中编写了一个应用程序并使用 mvvm 模式。
我尝试使用 ContentControl 和 DataTemplate 实现单页应用程序。
在我的应用程序中,我想根据 subview 模型切换 View ,如下所示:
我有一个带有内容控件的主窗口,它的内容绑定(bind)到 MainViewModel 中的一个属性:

public BaseViewModel CurrentViewModel { get; set; }

在我写的构造函数中:
CurrentViewModel = new LoginViewModel();

在 LoginViewModel 中,我有一个获取名称和密码并检查详细信息是否正确的函数。
如果没问题,我想将 MainViewModel 中的 CurrentViewModel 设置为 NavigationViewModel。

但是当我查找示例时,我发现只能直接在主视图模型中切换 View 模型。
我该怎么做???

最佳答案

如果我正确理解您的问题,您是在问如何更改 CurrentViewModel来自LoginViewModel登录完成后?

你不应该这样做。 LoginViewModel应该担心登录,并且不应该知道它在哪里被使用,或者应用程序的任何其他部分。
MainViewModel是拥有子VM并协调应用程序流的那个,所以它是MainViewModel那应该进行切换。

由于要在登录OK后切换 View ,所以需要LoginViewModel告诉你登录已经完成。两种明显的方法是:

  • LoginViewModel暴露了 LoginComplete事件,MainViewModel订阅,或
  • MainViewModel提供 LoginComplete ActionLoginViewModel构造函数,LoginViewModel登录完成时调用。

  • .
    public class MainViewModel 
    {
    //INPC omitted for brevity
    public object CurrentViewModel { get; private set; }

    public void MainViewModel()
    {
    this.CurrentViewModel = new LoginViewModel(LoginComplete);
    }

    private void LoginComplete()
    {
    this.CurrentViewModel = new NavigationViewModel();
    }
    }

    public class LoginViewModel
    {
    private Action loginCompleteAction;

    public void LoginViewModel(Action loginCompleteAction)
    {
    this.loginCompleteAction = loginCompleteAction;
    }

    private void UserHasLoggedIn()
    {
    this.loginCompleteAction();
    }
    }

    关于c# - 根据 subview 模型更改 wpf 单页应用程序中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307404/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com