使用构造函数

时间:2015-06-01 23:04:11

标签: c# mvvm mvvm-light win-universal-app

我正在使用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中?

感谢。

1 个答案:

答案 0 :(得分:0)

在最近的环球应用中,我检查了类似内容,但在OnLaunched

App.xaml.cs事件中启动此操作

根据isSignedIn检查确保我导航到正确的页面,如下所示:

bool navigated = rootFrame.Navigate(isSignedIn ? typeof(MainPage) : typeof(PromptPage);

您可以尝试查看这是否也适用于您的方案