如何以 MVVM 方式为 Windows 通用应用程序实现条件导航/重定向
-
21-12-2019 - |
题
我有一个涉及登录的 Windows 通用应用程序。此类应用的典型场景是不同的状态。例如,用户是否尚未首次登录,或者用户之前已经登录并只是再次重新打开应用程序。根据不同的状态,此处的操作如下
ifloggedin-显示主页|| ifnotloggedin-显示登录页
现在根据条件(状态)我们必须显示不同的页面。
我的问题类似于 这 但我想了解如何在 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)。有办法摆脱这个吗?
这 类似的解决方案似乎不再与 Windows 通用应用程序(Windows 8.1/Windows Phone 8.1)相关。
有谁知道如何使用 MVVM 以正确的方式实现这一点?
解决方案
好吧,在这种情况下 MVVM 不成立,因为这应该在选择视图之前发生。你为什么不创建一个类('Navigator
' 或其他)包含您的逻辑,并提供一个属性('InitialPage
')您在应用程序中使用(而不是硬编码的初始页面)导航到第一页?这样,您就可以将逻辑保留在 App 类之外,并且几乎不需要对其进行修改。
不隶属于 StackOverflow