【发布时间】:2015-08-15 13:49:37
【问题描述】:
我正在使用 MVVM(轻量级)开发一个通用应用程序,并且我正在尝试使用 SDK 集成 OneDrive。我的每个页面都有一个与之关联的 ViewModel。
我有一个启动页面 (OneDrivePromptPage),我提供用户登录 Microsoft OneDrive 或跳过登录过程。
当用户单击“跳过”按钮时,它会调用我的 OneDrivePromptViewModel 中的相关命令并通过调用导航到我的MainPage:
this._navigationService.Navigate(typeof(MainPage));
当用户单击“签名”按钮并提示用户输入他们的 OneDrive 凭据时同样适用,如果成功登录,它会导航到我的“主页”。
现在,这是我的问题。成功登录 OneDrive 后,我为容器设置了一个标志 (IsSignedIn=true) 并将其保存到我的存储 (RoamingSettings)。
以上所有方法都可以正常工作,但我遇到了一个问题,当我再次启动应用程序时,它会检查 OneDrivePromptViewModel 的构造函数,如果存储中的 IsSignedIn 值设置为 true。如果是,我将尝试自动登录 OneDrive。如果成功,我想导航到我的“主页”,但这不起作用。
它调用与上面相同的导航代码,不会引发任何错误,但它不会导航到我的“MainPage”并最终显示我的“提示”页面。
public OneDrivePromptViewModel(INavigationService navigationService,
ISettingsDataService settingsDataService)
{
this._navigationService = navigationService;
this._settingsDataService = settingsDataService;
bool isSignedIn = false;
isSignedIn = this._settingsDataService.
GetItem<bool>("MyStoreApp", "IsSignedIn");
if (isSignedIn && !MyOneDrive.IsSignedIn())
{
ExecuteSignInCommand();
}
else if (isSignedIn && MyOneDrive.IsSignedIn())
{
NavigateToMainPage();
}
}
任何想法为什么它没有导航到相关页面。是不是因为我从构造函数中调用它。如果这不是正确的调用位置,我应该从哪里调用它?
我什至不确定,我应该加载 OneDrivePromptPage 吗?我是否应该在加载 OneDrivePromptPage 或 MainPage 之前以某种方法执行此检查并执行上述相同的检查,但是我应该将这个方法放在哪里?在我的 App.cs 中?
谢谢。
【问题讨论】:
标签: c# mvvm mvvm-light win-universal-app