Подтвердить что ты не робот

Показать представление из режима не view/viewmodel в mvvmcross

Каков правильный способ открыть представление в mvvmcross из неотображения? Изнутри viewmodel мы будем использовать ShowViewModel < > (..).

В частности, мы отвечаем на push-уведомление, открывающее приложение (с пользовательской полезной нагрузкой), которое диктует представление, которое должно быть загружено.

У нас есть обходное решение для доказательства концепции, просто хотелось получить представление о правильном MVX-подходе

4b9b3361

Ответ 1

Я не думаю, что есть "правильный путь" - я думаю, это зависит от вашего приложения и от того, что вам нужно.

Для некоторых конкретных случаев - например, ViewModel- > ViewModel и AppStart - MvvmCross предоставляет несколько удобных методов:

  • вы можете вызвать ShowViewModel в MvxViewModel
  • запуск приложения может быть переопределен для использования объекта подсказки - см. https://speakerdeck.com/cirrious/appstart-in-mvvmcross

Но в целом любой класс может запросить ShowViewModel, вызвав:

         var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
         viewDispatcher.ShowViewModel(new MvxViewModelRequest(
                                                    viewModelType,
                                                    parameterBundle,
                                                    presentationBundle,
                                                    requestedBy));

Кроме того, существует базовый класс - MvxNavigatingObject.cs - который может помочь с этим (это базовый класс MvxViewModel и MvxAppStart), поэтому вы можете легко предоставить одна или несколько служб, например INavigateMyselfService, реализация которых наследуется от MvxNavigatingObject.

  public interface INavigateMyselfService
  {
      void GoWild(string side);
  }

  public class NavigateMyselfService
     : MvxNavigatingObject
     , INavigateMyselfService
  {
      public void GoWild(string side)
      {
          ShowViewModel<WildViewModel>(new { side = side });
      }
  }

Ответ 2

http://forums.xamarin.com/discussion/4694/conditionally-call-registerappstart-with-mvvmcross

Проверьте приведенную выше ссылку, и вы получите представление

В моем случае я хочу запустить приложение из вторичной плитки. Для этого мне нужно запустить определенную страницу для вторичной плитки.

Моя первоначальная модель представления начального приложения - это LoginViewModel, а моя стандартная модель запуска приложений - HomeViewModel.

Я контролировал это из класса App.cs(Core) в MyCustomAppStart.

Обратитесь к приведенной выше ссылке