通过MVVM Light NavigationTo将参数传递到第二页的更好方法

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

我正在使用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);

无论如何我可以从第二页ViewModel的第一页传递参数,而不是在第二页代码隐藏时覆盖OnNavigatedTo?

我试图找到优雅的方式,而不使用codebehind。并且不使用Messaging(我发现它不那么优雅)。

谢谢

c# mvvm-light uwp-xaml
1个回答
0
投票

通常,要在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;
}
© www.soinside.com 2019 - 2024. All rights reserved.