Ответ 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 });
}
}