Z pierwszego widoku przejdę do drugiego XVIEW z następującym kodem:

 var navigationParameters = new NavigationParameters{{ "id", 1 }};
 _regionManager.RequestNavigate(RegionNames.xRegion, new Uri("xView", UriKind.Relative), navigationParameters);

Z XVIEWMODEL w konstruktorze próbuję uzyskać identyfikator nawigacji

public xViewModel(NavigationParameters navigationParameters)
{
   var id = (int)navigationParameters["id"];
}

Co ja robię źle?

0
Inna 4 wrzesień 2020, 11:52

1 odpowiedź

Najlepsza odpowiedź

Nie można uzyskać dostępu do parametrów nawigacyjnych w konstruktorze. Musisz zaimplementować interfejs INavigationAware w modelu widoku.

public interface INavigationAware
{
    bool IsNavigationTarget(NavigationContext navigationContext);
    void OnNavigatedTo(NavigationContext navigationContext);
    void OnNavigatedFrom(NavigationContext navigationContext);
}

Metoda OnNavigatedTo jest automatycznie wywoływana przez serwis nawigacji Prism. Zawiera właściwość Parameters, aby uzyskać dostęp do parametrów nawigacyjnych, dzięki czemu możesz to zrobić:

public void OnNavigatedTo(NavigationContext navigationContext)
{
   var id = navigationContext.Parameters.GetValue<int>("id");
   // ...other code.
}

Można użyć metod GetValue<T> i GetValues<T> na NavigationParameters, więc nie musisz ich rzucać ich samodzielnie.

Możesz przeczytać więcej na temat wzoru udziału w nawigacji w nawigacji w Dokumentacja.

1
thatguy 4 wrzesień 2020, 09:02