Лучший способ передачи параметра на 2-ю страницу через MVVM Light NavigationTo - PullRequest
0 голосов
/ 16 февраля 2019

Я использую MVVM Light , и в настоящее время у меня есть 2 страницы UWP, которые я зарегистрировал в подклассе INavigationService .как показано ниже:

var nav = new CustNavigationService();
nav.Configure("FirstPage", typeof(FirstPage));
nav.Configure("SecondPage", typeof(SecondPage));
SimpleIoc.Default.Register<ICustNavigationService>(() => nav);

и я хочу отправить параметр с 1-го на 2-й, используя объект навигации, как показано ниже:

// Inside 1st Page code:
var args = "Hello From Page 1";
var nav = SimpleIoc.Default.GetInstance<ICustNavigationService>();
nav.NavigateTo("SecondPage", args);

Есть ли в любом случае, я могу получить переданные аргументы от 1-гостраница на 2-й странице ViewModel , без переопределение OnNavigatedTo на 2-й странице код позади ?

Я пытался найти элегантный способ без использования codebehind .И без использования Сообщения (что я нашел это не так элегантно).

Спасибо

1 Ответ

0 голосов
/ 18 февраля 2019

В общем, для навигации с параметром в модели вида в пределах MVVM Light , вы можете использовать NavigationService.Но mvvm light не предоставляет OnNavigatedToAsync такой метод в базовом классе ViewModelBase.Итак, вам нужно получить параметр из codebehind.И другой способ использует Messaging.

Я рекомендую использовать Template10.Это относительно более полный.И он предоставляет OnNavigatedToAsync визуальный метод, который используется для получения параметра навигации в режиме просмотра.

public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
{
    Value = (suspensionState.ContainsKey(nameof(Value))) ? suspensionState[nameof(Value)]?.ToString() : parameter?.ToString();
    await Task.CompletedTask;
}
...