模板10导航失败(Windows.UI.XAML.Controls.Frame.NavigationFailed未经处理



我似乎无法在模板中使用传统导航。我总是会出现导航失败的错误。Template10是否要求我使用" XAML行为样式"导航,而不是像以前一样在导航后面的代码?

我也在捕获内部异常,这些是我在那里看到的错误:

解析值时遇到的意外角色:h。路径'',第0行,位置0。您的参数必须序列化。如果不是,请使用SessionState。

(但是我的参数只是字符串)

        private void lvResults_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        try
        {
            int intIndex = lvResults.SelectedIndex;
            string strShowLink = g_ro.webPages.value[intIndex].displayUrl;
            //This is what is returned in the line above and I want it as my passed parameter : 
            //https://www.grc.com/sn/sn-482.htm
            //Open Detailspage sending parameter as a string
            Frame.Navigate(typeof(BlankPage1),strShowLink);
        }
        catch (Exception ex)
        {
            //Error caught in app.xaml.cs (UnhandleExceptio)
            //Windows.UI.Xaml.Controls.Frame.NavigationFailed was unhandled.
            string strEx = ex.Message;
        }

我做了一个基本的演示并重现了您的问题。我查看了模板10源代码,发现模板10在帧上添加了一个事件。按下如下:

frame.Navigating += (s, e) => FacadeNavigatingCancelEventHandler(s, e);
private async void FacadeNavigatingCancelEventHandler(object sender, NavigatingCancelEventArgs e)
{
        ...
    object parameter = null;
    try
    {
        parameter = SerializationService.Deserialize(e.Parameter?.ToString());
    }
    catch (Exception ex)
    {
        throw new Exception("Your parameter must be serializable. If it isn't, then use SessionState.", ex);
    }
    ...
 }

因此,在导航时它将尝试对您的参数进行挑选。您必须首先序列化参数:

using Template10.Services.SerializationService;
...
string param = @"https://www.grc.com/sn/sn-482.htm";
string str=SerializationService.Json.Serialize(param);
Frame.Navigate(typeof(OtherPage), str);

错误将消失。但是,如果您只想在Code-Behind上进行导航,也可以使用如下:

使用Navigationservice。
string param = @"https://www.grc.com/sn/sn-482.htm";
var NavService = NavigationService.GetForFrame(Frame);
NavService.Navigate(typeof(OtherPage), param);

有一个前提是您使用MVVM实践,并且在所讨论的页面中将ViewModel设置为DataContext(view-first)。该ViewModel将继承ViewModelBase,默认情况下确实具有NavigationService属性。否则,您将继承不可允许的构建自己的ViewModel并设置不可借记的接口"要求"的项目。

这还引入了关注点的分离,仅对"显示"不执行(除非与视图相关)并处理"单击,选择等",

请记住,这也将您推动您通过定义的类型x:Bind或延迟绑定"{Binding SomeProperty}"

绑定属性

最新更新