Попытка разобрать строку запроса в гиперссылке WPF, но NavigationService имеет значение null - PullRequest
0 голосов
/ 29 августа 2018

У меня есть эта гиперссылка:

<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, который по какой-то причине является нулевым. Почему навигационная служба пуста? Как еще можно получить строку запроса?

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что ваш View / ViewModel пытается получить доступ к свойству Dummy, пока объект еще не инициализирован, то есть кто-то обращается к NavigationService, когда он еще не установлен платформой. Убедитесь, что ваш код позволяет Page инициализироваться перед доступом к свойству NavigationService.

Например, если вы используете свойство Dummy в модели представления, вы можете установить viewmodel после загрузки представления:

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

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    this.Loaded += MainWindow_Loaded;
    DataContext = new MainViewModel();
}
...