【问题标题】:Navigating to another pages using navigation service with MVVM from the constructor从构造函数中使用带有 MVVM 的导航服务导航到另一个页面
【发布时间】: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


    【解决方案1】:

    在最近的通用应用程序中,我检查了类似的东西,但在App.xaml.csOnLaunched 事件中启动它

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

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

    您可以尝试看看这是否也适用于您的场景

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2020-07-27
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多