我正在使用MVVM(轻量级)开发通用应用程序,并尝试使用SDK集成OneDrive。我的每个页面都有一个与之关联的ViewModel。
我有一个启动页面(OneDrivePromptPage
),我提供用户登录Microsoft OneDrive或跳过登录过程。
当用户点击“跳过”按钮时,它会调用我的OneDrivePromptViewModel中的相关命令,并通过调用导航到我的MainPage
:
this._navigationService.Navigate(typeof(MainPage));
当用户单击“签名”按钮并提示用户输入OneDrive凭据时,同样适用,如果成功登录,则会导航到我的主页'。
现在,这是我的问题。当成功登录到OneDrive时,我将一个标志(IsSignedIn = true)设置为一个容器并将其保存到我的存储空间(RoamingSettings
)。
以上所有方法都运行良好但我遇到的问题是,当我再次启动应用程序时,如果存储中的IsSignedIn值设置为true,它会检查OneDrivePromptViewModel的构造函数。如果是,我会尝试自动登录OneDrive。如果成功,我想导航到我的主页'但这不会奏效。
它调用与上面相同的导航代码,不会抛出任何错误,但它不会导航到我的主页'并最终显示我的"提示"页。
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中?
感谢。
答案 0 :(得分:0)
在最近的环球应用中,我检查了类似内容,但在OnLaunched
App.xaml.cs
事件中启动此操作
根据isSignedIn检查确保我导航到正确的页面,如下所示:
bool navigated = rootFrame.Navigate(isSignedIn ? typeof(MainPage) : typeof(PromptPage);
您可以尝试查看这是否也适用于您的方案