gpt4 book ai didi

c# - 使用来自构造函数的MVVM使用导航服务导航到其他页面

转载 作者:行者123 更新时间:2023-12-03 10:44:55 25 4
gpt4 key购买 nike

我正在使用MVVM(light)开发通用应用程序,并且正在尝试使用SDK集成OneDrive。我的每个页面都有一个与之关联的ViewModel。

我有一个启动页面(OneDrivePromptPage),在该页面中,我为用户提供了登录Microsoft OneDrive或跳过登录过程的功能。

当用户单击“跳过”按钮时,它将在我的OneDrivePromptViewModel中调用相关命令,并通过调用以下内容导航到我的MainPage:
this._navigationService.Navigate(typeof(MainPage));
当用户单击“登录”按钮并提示用户输入其OneDrive凭据时,同样适用。如果成功登录,它将导航到我的“MainPage”。

现在,这是我的问题。成功登录OneDrive后,我将一个标志(IsSignedIn = true)设置到一个容器并将其保存到我的存储中(RoamingSettings)。

上面的所有方法都可以正常工作,但是我遇到的问题是,当我再次启动应用程序时,如果存储中的IsSignedIn值设置为true,它将检查OneDrivePromptViewModel的构造函数。如果是这样,我将尝试自动登录OneDrive。如果成功,我想导航到“MainPage”,但这将无法正常工作。

它调用与上述相同的导航代码,不会引发任何错误,但不会导航到我的“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中?

谢谢。

最佳答案

在最近的Universal应用程序中,我检查是否存在类似内容,但在OnLaunchedApp.xaml.cs事件中启动此操作

确保基于isSignedIn检查我是否导航到正确的页面,如下所示:

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

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

关于c# - 使用来自构造函数的MVVM使用导航服务导航到其他页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com