gpt4 book ai didi

c# - 如何以MVVM方式为Windows Universal App实现条件导航/重定向

转载 作者:行者123 更新时间:2023-12-03 10:36:38 24 4
gpt4 key购买 nike

我有一个涉及登录的Windows通用应用程序。
这种应用程序的典型场景是不同的状态。例如,用户是否是第一次登录还是该用户之前已经登录并再次重新打开应用程序。根据状态,这里是 Action

IfLoggedIn-显示主页
|| IfNotLoggedIn-显示登录页


现在,根据条件(状态),我们必须显示不同的页面。

我的问题类似于this,但我想了解如何在MVVM中实现相同的功能,以及放置此条件逻辑的正确位置是什么。

将其放在app.xaml.cs中可以解决此问题,但会弄乱您的app.xaml.cs并违反MVVM,因为ViewModel不处理交互逻辑。

我尝试的解决方案是

  • 创建一个中间页面(Intermediate.xaml)。
  • 为上述创建相应的ViewModel(IntermediateViewModel.cs)。
  • 在此ViewModel的构造函数中,合并条件语句来确定要浏览的页面。

  • 让我们假设我的条件在 bool 变量IsLoggedIn中。有条件检查放在哪里?

    我的IntermediateViewModel中的代码如下
    public bool IsLoggedIn {get; set;}
    //IsLoggedIn contains the condition of whether the user is logged-in or not-logged-in

    public IntermediateViewModel()
    {
    if (IsLoggedIn == false)
    {
    NavigationService.Navigate("LoginPage");
    }
    else if (IsLoggedIn == true)
    {
    NavigationService.Navigate("HomePage");
    }
    }

    现在,此解决方案的问题是您的后堆栈中还有一页(Intermediate.xaml)。有办法摆脱这种情况吗?

    This和类似的解决方案似乎不再与Windows Universal Apps(Windows 8.1/Windows Phone 8.1)相关。

    有谁知道如何用MVVM正确地实现这一目标?

    最佳答案

    好吧,在这种情况下,MVVM不成立,因为这应该在选择 View 之前发生。为什么不创建一个包含逻辑的类(“Navigator”或其他),并提供一个您在App中使用的属性(“InitialPage”)(而不是硬编码的初始页面)来导航到第一页?这样,您就可以将逻辑保持在App类之外,并且几乎不需要进行任何修改。

    关于c# - 如何以MVVM方式为Windows Universal App实现条件导航/重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25053625/

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