【问题标题】:ReactiveUI - Confused about RoutingReactiveUI - 对路由感到困惑
【发布时间】:2014-01-17 02:41:46
【问题描述】:

我正在为 Win Store、WP8、iOS、Droid 上的一个主要制药项目比较 MvvmCross 和 ReactiveUI。我们已经选择了 Xamarin。

我对 ReactiveUI 完全陌生。我真的很喜欢我所看到的原则,我认为保罗是个天才。然而,细节正在成为一个真正的熊。我花了几天时间来查找文档(该手册是 2011 年的,似乎几乎完全过时了——它甚至不包含“路由器”这个词)和示例代码。

我正在查看来自 ReactiveUI.Samples 的示例 还有来自 ReactiveUI 解决方案的 MobileSample-RT 项目。

我的小世界基于 ReactiveUI.Samples “路由”示例。坦率地说,这并不是一个示例,因为它所做的只是从 AppBootstrapper 导航到唯一的视图。我正在尝试做类似于 MobileSample-RT 中的“三页”示例的事情。问题是,如果我在我的项目中尝试这样的事情:

HostScreen.Router.Navigate.Execute(RxApp.DependencyResolver.GetService(typeof(LoginViewModel)));

崩溃(ReactiveUI.dll 中未加载 pdb 符号)

如果我试试这个:

HostScreen.Router.NavigateCommandFor<LoginViewModel>().Execute(HostScreen);

同样的结果 - 严重崩溃。这真的让我很震惊,因为它似乎应该“正常工作”。

我可以这样称呼:

HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen));

正如预期的那样,它确实符合我的看法。我还在主屏幕上连接了一个后退按钮:

this.OneWayBind(AppBootstrapper, x => x.Router.NavigateBack, x => x.BackButton.Command);

这确实从我刚刚导航到的视图中移回了。

所以现在我想再次前进。我(再次)单击执行此操作的按钮:

HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen));

然后我回到那个观点。然而,这一次需要点击 2 次后退按钮才能真正向后移动。如果我然后再次向前移动,则下次需要单击 3 次。 NavigationStack 正在填满 LoginViewModel 的新实例。

那么,进行路由/导航的正确方法是什么?为什么这些命令会崩溃?而不是每次在 Navigate.Execute 中调用“new”,我如何导航到已经在导航堆栈中的视图模型(或者它应该首先存在?)。

非常感谢您提供的任何清晰度。

【问题讨论】:

  • 您提到 pdb 未加载。 Paul 将每个构建推送到 symbolsource.org,我发现配置它对于理解和学习响应式 UI 非常宝贵。网站上有关于如何配置 Visual Studio 调试器的说明。

标签: mvvm routing reactiveui


【解决方案1】:

如果您正在为 iOS 和 Android 构建,您根本不想使用路由 - 路由的概念与平台希望您执行的操作有太多冲突(即使在 WP8 上这也有点牵强,但我能够hacky 让它工作)。您应该坚持查看优先的位置。

但是,如果您使用的是 Xamarin Forms,ReactiveUI 可以很好地与基于 VM 的路由配合使用(因为 Xamarin 设法完成所有黑客操作以使其成为可能!)。查看https://github.com/paulcbetts/xamarinevolve2014 的演示

我知道文档很烂,我正在编写新文档:

【讨论】:

  • @PaulBetts 您仍然建议避免路由 Xamarin.ios 和 Xamarin.Android 吗?我们正在考虑使用 MVVMCross 来通过 viewmodel 进行导航,并使用 ReactiveUI + Reactive 扩展来管道应用程序。您是否看到有关此配置的任何问题?还是有一种我看不到的方法可以通过带有 ReactiveUI 的视图模型导航?
猜你喜欢
  • 2015-12-18
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多