Ответ 1
Существует, по крайней мере, один опубликованный образец, показывающий использование раскадровки - довольно странно названный eh
- https://github.com/slodge/eh
Этот образец работал:
- позволяет раскадровке управлять навигацией
- используя
MvxViewController
в качестве базового класса VC (вместоUIViewController
) - вручную установить
ViewModel
в одном случае - установив его непосредственно перед вызовомbase.ViewDidLoad()
- см. https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L23 - вручную установка
Request
в одном случае - во время навигацииSegue
- см. https://github.com/slodge/eh/blob/master/storyb/RootViewController.cs#L40
Используя такие подходы, довольно легко добавить привязку данных Mvx к приложению, которое в основном управляется раскадрой.
В качестве альтернативы, если разработчики предпочли бы, чтобы навигационная система Mvx ShowViewModel
управляла потоком экранов, но также предпочла бы, чтобы эти экраны были разработаны в раскадровке, тогда это возможно, разработав нормальное приложение MvvmCross, но используя пользовательский Presenter
, который загружает ViewControllers из раскадровки.
В v3.1.1 из MvvmCross вы можете сделать это на уровне ViewsContainer
:
- переопределить класс
MyContainer
изMvxTouchViewsContainer.cs
- переопределить метод
protected virtual IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
- см. https://github.com/MvvmCross/MvvmCross/blob/b8545752f28f4e569efeaa397c3085b0373e4d8b/Cirrious/Cirrious.MvvmCross.Touch/Views/MvxTouchViewsContainer.cs#L40 -
в этом переопределении загрузите ViewControllers на основе раскадровки:
protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request) { return (IMvxTouchView)UIStoryboard.FromName("MyStoryBoard", null) .InstantiateViewController(viewType.Name); }
-
создайте
MyContainer
во времяSetup
-protected override IMvxTouchViewsContainer CreateTouchViewsContainer() { return new MyContainer(); }
-
который должен тогда работать...