gpt4 book ai didi

mvvm - ReactiveUI - 对路由感到困惑

转载 作者:行者123 更新时间:2023-12-04 07:23:08 26 4
gpt4 key购买 nike

我正在将 MvvmCross 与 ReactiveUI 进行比较,用于 Win Store、WP8、iOS、Droid 上的一个主要制药项目。我们已经选择了 Xamarin。

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

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

我基于 ReactiveUI.Samples “Routing” 示例创建了我的小世界。坦率地说,这不是一个例子,因为它所做的只是从 AppBootstrapper 导航到唯一的 View 。我正在尝试做一些类似于 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);

这确实从我刚刚导航到的 View 返回。

所以现在我想再次前进。我单击执行此操作的按钮(再次):
HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen));

我回到那个观点。然而,这次需要点击 2 次后退按钮才能真正返回。如果我再次前进,下次需要点击 3 次。 NavigationStack 正在填充 LoginViewModel 的新实例。

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

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

最佳答案

如果你正在为 iOS 和 Android 构建,你根本不想使用路由 - 路由的概念与平台希望你做的事情有太多冲突(即使在 WP8 上也是一个延伸,但我能够做到这一点工作)。您应该坚持查看优先位置。

但是,如果您使用 Xamarin Forms,ReactiveUI 可以很好地与基于 VM 的路由配合使用(因为 Xamarin 设法完成了所有技巧以使其成为可能!)。退房 https://github.com/paulcbetts/xamarinevolve2014对于它的演示

我知道文档很烂,我正在研究新文档:

  • https://github.com/reactiveui/ReactiveUI/pull/391 - 拉取请求/进度
  • https://github.com/reactiveui/ReactiveUI/tree/docs/docs/basics - 可浏览版本
  • 关于mvvm - ReactiveUI - 对路由感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176903/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com