Ste*_*ald 8 routing mvvm reactiveui
我正在为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)));
Run Code Online (Sandbox Code Playgroud)
它崩溃了(ReactiveUI.dll中没有加载pdb符号)
如果我试试这个:
HostScreen.Router.NavigateCommandFor<LoginViewModel>().Execute(HostScreen);
Run Code Online (Sandbox Code Playgroud)
同样的结果 - 硬碰撞.这真的让我觉得它似乎应该"正常工作".
我可以这样称呼:
HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen));
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它确实在我看来.我还在主屏幕上连接了一个后退按钮:
this.OneWayBind(AppBootstrapper, x => x.Router.NavigateBack, x => x.BackButton.Command);
Run Code Online (Sandbox Code Playgroud)
这确实从我刚刚浏览过的视图中回过来.
所以现在我想再次向前迈进.我点击执行此操作的按钮(再次):
HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen));
Run Code Online (Sandbox Code Playgroud)
我回到那个观点.但是这次需要在后退按钮上单击2次才能实际返回.如果我再向前移动,则下次需要3次点击.NavigationStack正在填充LoginViewModel的新实例.
那么,路由/导航的正确方法是什么?为什么这些命令会崩溃?而不是每次在Navigate.Execute中调用"new",我如何导航到已经在导航堆栈中的视图模型(或者它应该首先在那里?).
非常感谢您提供的任何清晰度.
如果您正在为iOS和Android构建,那么您根本就不想使用路由 - 路由冲突的概念太多与平台要求您做的事情(即使在WP8上它也是一个延伸,但我能够hacky使它工作).你应该坚持使用View-first位置.
但是,如果您使用的是Xamarin Forms,ReactiveUI可以很好地与基于VM的路由配合使用(因为Xamarin设法完成了所有的操作以使其成为可能!).查看https://github.com/paulcbetts/xamarinevolve2014获取它的演示
我知道文档很糟糕,我正在研究新文档:
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |