#ios #xamarin #mvvmcross
#iOS #xamarin #mvvmcross
Вопрос:
У меня есть страница со списком, ListViewModel
и для каждого элемента списка есть подробный просмотр DetailViewModel
.
Теперь я хочу перейти со AnotherViewModel
страницы списка и открыть непосредственно одно из подробных представлений.
Я не хочу открывать DetailViewModel
напрямую AnotherViewModel
, потому что пользователь должен перейти к ListViewModel
при нажатии кнопки «Назад».
Для этой цели я вызываю в своем AnotherViewModel
:
this.ShowViewModel<ListViewModel>(new { showDetailId = "42" });
У ListViewModel
меня есть свой метод инициализации, подобный этому:
public void Init(string showDetailId)
{
this.LoadList();
if (!string.IsNullOrEmpty(showDetailId))
{
this.ShowViewModel<DetailViewModel>(new { detailid = showDetailId });
}
}
Это отлично работает в Android, но в iOS представления каким-то образом перепутываются: я вижу ListView, но также и кнопку «< Назад». Нажав «< Назад», приложение зависает.
Я ожидал бы увидеть DetailView и «< Back», которые должны привести обратно к ListView.
Комментарии:
1. Возможно, было бы проще перейти к подробному просмотру, обработать кнопку «Назад» и перейти к просмотру списка. Вы можете управлять стеком в презентаторе, чтобы он работал, просто вернувшись назад.
2. Пользовательский презентатор, отложенный навигационный вызов или переключатель где-то в вызывающем коде — определенно лучший способ сделать это здесь — отображение ViewModel из Init вызывает повторные вызовы представления / навигации, что может вызвать проблемы с пользовательским интерфейсом как на iOS, так и на Windows.