Я в процессе сравнения MvvmCross с ReactiveUI для крупного фармпроекта в Win Store, WP8, iOS, Droid. Мы уже выбрали Xamarin.ReactiveUI - Confused about Routing
Я совершенно не знаком с ReactiveUI. Мне очень нравится то, что я вижу в принципе, и я думаю, что Пол - гений. Однако детали становятся настоящим медведем. Я потратил несколько дней на отслеживание документации (руководство с 2011 года и кажется почти полностью устаревшим - в нем даже не содержится слова «Router») и пример кода.
Я смотрю образец из ReactiveUI.Samples Также проект MobileSample-RT из решения ReactiveUI.
Я основал свой маленький мир приветствия на ReactiveUI. Пример «Маршрутизация». Честно говоря, это не очень пример, поскольку все, что он делает, - это перейти от AppBootstrapper к единственному виду. Я пытаюсь сделать что-то похожее на пример «трех страниц» от MobileSample-RT. Проблема заключается в том, если я пытаюсь что-то вроде этого в моем проекте:
HostScreen.Router.Navigate.Execute(RxApp.DependencyResolver.GetService(typeof(LoginViewModel)));
он выходит из строя (PDB символы не загружены в ReactiveUI.dll)
Если я пытаюсь это:
HostScreen.Router.NavigateCommandFor<LoginViewModel>().Execute(HostScreen);
Same результат - жесткий сбой. Это действительно бросило меня, поскольку это похоже на то, что должно «просто работать».
Я могу назвать это:
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, как мне перейти к модели просмотра, которая уже находится в стеке навигации (или она должна быть там в первую очередь?).
Большое спасибо за любую ясность, которую вы можете предоставить.
Вы упомянули, что pdb не загружен. Пол подталкивает каждую сборку к http://www.symbolsource.org/, и я нашел, что это настраивает, чтобы быть бесценным в понимании и изучении реактивных вопросов. Инструкции по настройке отладчика visual studio находятся на сайте. – Gordon