所以我正在创建UWP应用程序,并使用方法
Frame.Navigate(Type type)
浏览我的观点。但是我的一个页面需要传递带导航的对象,所以我使用这个方法
Frame.Navigate(Type type, object param)
然后我可以在页面的代码隐藏中获取参数,如下所示:
public object NavigationParameter { get; private set; }
protected override void OnNavigatedTo(NavigationEventArgs e)
{
NavigationParameter = e.Parameter;
}
这很棒,但我使用的是MVVM模式,所以我希望在我的页面的VM上获取此参数。我怎么能这样做?
P.S。:零代码背后的解决方案将是非常壮观的。
答案 0 :(得分:1)
我建议你看看一些MVVM框架,它可以为你处理这样的东西,并让你实现你目标的光荣无代码。我使用并推荐Caliburn.Micro,因为它包含您需要的一切(导航服务,自动视图模型绑定等)。
答案 1 :(得分:1)
如果你正在使用 UWP和MVVM Light ,并希望:
访问NavigationServicesEx.Navigate方法中传递的参数
在导航页面时调用ViewModel中的方法。
Marco Minerva的这个blog建议如何在目标页面导航到的时候挂钩到Frame_Navigating事件(它从vanilla NavigationServiceEx类中丢失)以访问参数。
tl; dr
创建博客中描述的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;
}