我有一个涉及登录的 Windows 通用应用程序。此类应用的典型场景是不同的状态。例如,用户是否尚未首次登录,或者用户之前已经登录并只是再次重新打开应用程序。根据不同的状态,此处的操作如下

ifloggedin-显示主页|| ifnotloggedin-显示登录页

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

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

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

我尝试的解决方案是

  1. 创建一个中间页面(Intermediate.xaml)。
  2. 为上面创建相应的ViewModel(IntermediateViewModel.cs)。
  3. 在此 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)。有办法摆脱这个吗?

类似的解决方案似乎不再与 Windows 通用应用程序(Windows 8.1/Windows Phone 8.1)相关。

有谁知道如何使用 MVVM 以正确的方式实现这一点?

有帮助吗?

解决方案

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top