我使用MVVMLight开发了一个通用应用程序Windows 8.1 / Windows Phone 8.1。 我想知道哪些是在页面之间实现导航的最佳实践 有以下几页:
我需要通过从页面导航到另一个页面来传递参数:所选主题,所选联系人,所选文章,...
我找到了一个导航tavers MVVMLight v5的示例实现,但没有参数:
navigationservice-in-mvvm-light-v5
我找到了另一个带参数的例子,但我没有设法实现它:
navigating-to-a-new-page-from-the-view-model-in-windows-phone-8-1-universal-app
答案 0 :(得分:1)
如果你想要:
访问NavigationServicesEx.Navigate方法中传递的参数
在导航页面时调用ViewModel中的方法。
Marco Minerva的这个blog展示了如何挂钩它在vanilla NavigationServiceEx类中缺少的Frame_Navigating事件。
创建博客中描述的INAVigable界面:
public interface INavigable
{
Task OnNavigatedToAsync(object parameter, NavigationMode mode);
void OnNavigatingFrom(NavigatingCancelEventArgs e);
void OnNavigatedFrom();
}
为NavigationServicesEx类中的Frame.Navigating事件添加处理程序(带有一些额外的管道,请参阅博客),然后在ViewModel中实现INavigable接口。
然后,您就可以访问在Navigate调用中传递的参数:
NavigationServiceEx.Navigate(typeof(DestinationPage).FullName, yourParameter);
在ViewModel中实现的OnNavigatedToAsync方法:
public Task OnNavigatedToAsync(object parameter, NavigationMode mode)
{
if (parameter != null)
{
YourThing thing = parameter as YourThing;
this.UseYourThing(thing);
}
return Task.CompletedTask;
}
编辑:哦,然后浏览ViewModel。您可以在VM中调用一个方法来处理来自Command或View后面代码的导航。