#xamarin #mvvmcross
#xamarin #mvvmcross
Вопрос:
В MvvmCross есть ли способ попросить службу навигации закрыть определенную ViewModel?
Например, допустим, у меня есть 3 модели просмотра
A B C
Я перешел от A к B к C.
A -> B -> C
В представлении C я нажимаю кнопку Готово и хотел бы вернуться к просмотру A.
Есть ли способ сделать что-то подобное в ViewModel C?
_navigationService.Close<A>(this);
Комментарии:
1.
IMvxNavigationService Close
приведет к закрытию конкретной viewmodel. Пожалуйста, проверьте ссылку ниже. github.com/MvvmCross/MvvmCross/pull/30632. @WendyZang-MSFT Вы предлагаете мне просто вызвать close для всех ViewModels, которые я хочу закрыть в ViewModel C?
Ответ №1:
если вы подключены Xamarin.Forms
(если нет, дайте мне знать, и я обновлю ответ, потому что это не так просто), в IMvxNavigationService
у вас есть ChangePresentation(...)
метод, который использует объект подсказки, чтобы сообщить платформе, что вы хотите сделать.
Task<bool> ChangePresentation(MvxPresentationHint hint, CancellationToken cancellationToken = default(CancellationToken));
Здесь у вас есть различные готовые подсказки, которые предоставляет платформа.
Для решения вашей проблемы вы можете просто использовать MvxPopPresentationHint
:
_navigationService.ChangePresentation(new MvxPopPresentationHint(typeof(A)));
или, если A
это ваша корневая ViewModel, вы можете просто использовать MvxPopToRootPresentationHint
:
_navigationService.ChangePresentation(new MvxPopToRootPresentationHint());
ПРИВЕТ
Комментарии:
1. Я не использую формы. Я использую Android и iOS.
2. Похоже, вам нужно подклассировать презентеров platform view для iOS / Android, если вы хотите это сделать. Я отмечаю этот ответ как правильный, поскольку на данный момент решения на самом деле нет. github.com/MvvmCross/MvvmCross/issues/4032
3. да, вам нужно создать подкласс view presenter на платформе и отправить пользовательскую подсказку. Который затем, в зависимости от подсказки, вы реализуете закрытие на каждой платформе. Извините, что не ответил раньше. Если у вас возникнут какие-либо проблемы с этим, дайте мне знать, и я завершу ответ, как только смогу