我有这个超链接:
<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
,由于某种原因这是空的。为什么导航服务为空?我怎么能得到查询字符串?
我认为您的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();
}