【问题标题】:How to implement conditional Navigation/Redirect for a Windows Universal App in MVVM way如何以 MVVM 方式为 Windows 通用应用程序实现条件导航/重定向
【发布时间】:2014-07-31 20:32:46
【问题描述】:

我有一个涉及登录的 Windows 通用应用程序。 这种应用程序的典型场景是不同的状态。例如,用户是否是第一次登录,或者用户之前已经登录并再次重新打开应用程序。这里的动作取决于状态

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

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

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

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

我尝试过的解决方案是

  1. 创建一个中间页面(Intermediate.xaml)。
  2. 为上面创建对应的ViewModel(IntermediateViewModel.cs)。
  3. 在此 ViewModel 的构造函数中包含条件语句以决定要导航的页面。

让我们假设我在布尔变量 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 通用应用程序(Windows 8.1/Windows Phone 8.1)相关。

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

【问题讨论】:

    标签: c# mvvm windows-8.1 windows-phone-8.1 win-universal-app


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这看起来是一个不错的解决方案。
    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多