尝试解析WPF超链接中的查询字符串,但NavigationService为null

问题描述 投票:0回答:1

我有这个超链接:

<Hyperlink NavigateUri="Page2.xaml?dummy=Kirk">Go to page 2</Hyperlink>

然后在链接页面Page2.xaml.cs中的这个解析代码:

public string GetQueryStringParameter(string key)
{
    var spl = NavigationService.Source.Query.Split(',');
    foreach (var s in spl)
    {
        var spl2 = s.Split('=');
        if (spl2[0] == key)
            return spl2[1];
    }
    throw new ArgumentException($"Could not find parameter {key} in query string {NavigationService.Source.Query}.");
}

public string Dummy => GetQueryStringParameter("dummy");

然而,GetQueryStringParameter崩溃试图检索NavigationService,由于某种原因这是空的。为什么导航服务为空?我怎么能得到查询字符串?

c# .net wpf xaml query-string
1个回答
1
投票

我认为您的View / ViewModel正在尝试访问Dummy属性,而对象仍未初始化,这意味着有人在框架尚未设置时访问NavigationService。确保您的代码在访问NavigationService属性之前让Page初始化。

例如,如果在视图模型中使用Dummy属性,则可以在加载视图后设置viewmodel:

public MainWindow()
{
    InitializeComponent();
    this.Loaded += MainWindow_Loaded;
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    this.Loaded += MainWindow_Loaded;
    DataContext = new MainViewModel();
}
© www.soinside.com 2019 - 2024. All rights reserved.