【问题标题】:IsolatedStorageSettings and NavigationService Error隔离存储设置和导航服务错误
【发布时间】:2014-03-17 01:56:31
【问题描述】:

所以我休息一下,从 C# 转到 VB 来开发 Windows Phone 8 应用程序。这只是一个测试,我遇到了这个非常奇怪的问题。

首先我的基本场景是我有页面 A 和页面 B。用户必须在进入页面 B 之前填写一些详细信息。只有在用户已经填写了信息的情况下才会显示页面 B页面 A,有点像第一次运行。

我所做的是添加了这段代码:

Private Sub createbtn_Click(sender As Object, e As RoutedEventArgs) Handles createbtn.Click
    '...
    IsoSettings.Add("AccountCreated", Nothing)
    NavigationService.Navigate(New Uri("/MainMenu.xaml", UriKind.Relative))
    NavigationService.RemoveBackEntry()
End Sub

一旦用户点击“创建帐户”按钮。他将被导航到页面 B,此后用户将不必在页面 A 中填写信息。“AccountCreated”是一种检查。在这里:

Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)        
    If IsoSettings.Contains("AccountCreated") Then            
        NavigationService.Navigate(New Uri("/MainMenu.xaml", UriKind.Relative)) 'Page B
        NavigationService.RemoveBackEntry()          
    Else
        NavigationService.Navigate(New Uri("/MainPage.xaml", UriKind.Relative)) 'Page A
    End If
End Sub

所以基本上检查并查看 IsoSettings 是否包含“AccountCreated”然后将用户带到页面 B,如果不将他带到页面 A。现在这种方式工作正常。没问题。按照我想要的方式工作。

现在我添加了一个设置页面。有一种设置,用户可以决定是否显示登录页面。如果它是“关闭”的,那么显然它不会被显示并且打开......

我已经添加了这个:

If IsoSettings.Contains("AccountCreated") Then
        Try
            Dim ShowLoginPage As Byte = CByte(AppSettings("StartupLogin"))
            If ShowLoginPage = 0 Then
                NavigationService.Navigate(New Uri("/LoginPage.xaml", UriKind.Relative))
                NavigationService.RemoveBackEntry()
            ElseIf ShowLoginPage = 1 Then
                NavigationService.Navigate(New Uri("/MainMenu.xaml", UriKind.Relative))
                NavigationService.RemoveBackEntry()
            End If
        Catch ex As KeyNotFoundException
            AppSettings.Add("StartupLogin", 0)
        End Try
    Else
        NavigationService.Navigate(New Uri("/MainPage.xaml", UriKind.Relative))
End If

现在这就是问题发生的地方。所以当用户第一次运行这个应用程序时。他必须浏览页面 A。他填写信息,然后导航到登录页面。现在,一旦用户登录或只是在登录页面中关闭应用程序并重新打开它,用户就会被导航到页面 A,要解决此问题,用户必须关闭应用程序并重新打开它。

有人可以帮我清理一下吗? 谢谢!

【问题讨论】:

    标签: vb.net windows-phone-8 isolatedstorage navigationservice


    【解决方案1】:

    我不确定我是否理解正确以及其余代码中的内容,但从提供的代码中我发现:

    • 您的应用程序第一次运行。 Dim ShowLoginPage As Byte = CByte(AppSettings("StartupLogin")) 行抛出异常 - AppSettings 中没有 StartupLigin,所以它正在添加它,但导航跟随异常被处理。
    • StartupLigin 第二次存在,所以它通过 if 语句

    如果您在 App.xaml.cs 中的 Application_Launching() 中检查了第一次运行,我认为这将是合适的。

    我也看不到您将 AppSettings 保存在哪里 - 如果您希望保留您的数据,您应该这样做。

    【讨论】:

    • 谢谢。对不起,如果你不明白,但是是的,你给了我这个想法。我所做的是在Application_Launching 中添加了AppSettings.Add("StartupLogin", 0),它运行良好。干得好!
    • @Ahmed.C 当然,您应该首先检查 StartupLogin 是否已经存在等等 - 但您可能已经意识到这一点。祝你好运,编码愉快。
    • 是的。我实际上正在这样做。我没有意识到将代码放在 App Launching 会按照我的意图工作。无论成本如何,它都会不断添加它。我现在需要找到解决方法。希望这不会花费太长时间。
    • @Ahmed.C 我不确定您正在寻找什么解决方法 - 通常您应该检查 AppSettings 中是否存在密钥,如果不存在,添加它,否则更改它。例如,根据布尔值,您可以检查用户是否输入了一些信息。请记住执行 AppSetting.Save() 以在 App 的单独运行之间保存数据。
    • 我现在设法让它工作了 :D 这很简单。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多