我正在使用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(我发现它不那么优雅)。
谢谢
通常,要在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;
}