我有一个涉及登录的Windows通用应用程序。 这种应用的典型场景是不同的状态。例如,用户是否还没有第一次登录,或者用户是否已经登录过,只是再次重新打开应用程序。根据状态,这里是行动
IfLoggedIn - 显示主页 || IfNotLoggedIn - 显示登录页面
现在根据条件(状态),我们必须显示不同的页面。
我的问题与this类似,但我想了解如何在MVVM中实现相同的内容以及放置此条件逻辑的正确位置。
将它放在app.xaml.cs中可以解决问题但会弄乱你的app.xaml.cs并违反MVVM,因为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");
}
}
此解决方案的问题是,您的Backstack中还有一个页面(Intermediate.xaml)。有没有办法摆脱这个?
This和类似的解决方案似乎不再与Windows Universal Apps(Windows 8.1 / Windows Phone 8.1)相关。
有没有人知道如何以正确的方式使用MVVM实现这一点?
答案 0 :(得分:1)
嗯,在这种情况下MVVM不成立,因为这应该在选择视图之前发生。为什么不创建一个包含逻辑的类('Navigator
'或其他),并提供您在App中使用的属性('InitialPage
')(而不是硬编码的初始值)页面)导航到第一页?通过这种方式,您可以将逻辑保留在App类之外,并且几乎不需要对其进行任何修改。