如何解决如何使用ReactiveUI在Xamarin.Forms中的同级页面之间实现直接转换?
我需要使用ReactiveUI框架在Xamarin.Forms应用程序中实现路由功能。
 黑色箭头上方显示向前转换(例如,我通过单击菜单项按钮从“菜单”转到“订单”页面),而红色箭头用于“返回”功能。请注意,“返回”应同时适用于以下两种情况:(a)顶部导航栏中的“返回”链接(b)Android设备上的硬件“返回”按钮。
如何实现类似以下同级页面之间的过渡:
- 菜单-订单-地图-返回菜单
- 菜单-订单-订单详细信息-引脚详细信息页面-返回地图-返回菜单 ?
P.S。这是我最近遵循的指南https://www.reactiveui.net/docs/handbook/routing/,因此我使用GoNext / GoBack命令来实现更简单的过渡,例如菜单-订单-订单详细信息-返回订单-返回菜单。在上述情况下,此方法效果不佳,因为“后退”按钮会转换回上一页而不是导航地图中的父页面。
解决方法
NavigateBack
命令的实现为MSDN,它只是从RoutingState.NavigationStack
中删除了最后一个元素,RoutingState.NavigationStack
是ObservableCollection<IRoutableViewModel>
的实例。
因此,在您的特定情况下,您可以编写自己的NavigateBack
命令实现,以根据应用程序域的需要更改导航堆栈。您可以使用switch
块找出屏幕上当前显示的页面,然后将该页面映射到另一个页面,该页面是新创建的或存储在字段或Locator.Current
中的。可能您的命令也将需要更复杂的canExecute
实现。
ReactiveCommand<Unit,IRoutableViewModel> navigateBackDomainAware =
ReactiveCommand.CreateFromObservable(() => {
var currentViewModel = NavigationStack[NavigationStack.Count - 1];
if (currentViewModel is PinDetailsViewModel) {
var mapViewModel = GetMapViewModel();
NavigationStack.Add(mapViewModel); // The navigation.
return Observable.Return(mapViewModel);
} else {
// Handle other pages. You can also put some domain-specific code
// describing the navigation mappings in your application here.
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。