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

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

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

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

2 ответа

Решение

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

Для некоторых конкретных случаев - например, 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 });
      }
  }

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

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

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

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

Я управлял этим из App.cs (Core) в класс MyCustomAppStart.

См. Ссылку выше

Другие вопросы по тегам