Я пишу приложение для Android, iPhone, WinRT и WinPhone, которое требует, чтобы пользователь сначала заходил в систему (они могут сохранять свои учетные данные, поэтому этот шаг, возможно, необходимо будет пропустить после первого входа).
Я знаю, что могу зарегистрировать модель просмотра входа в качестве начальной страницы, но тогда мне нужно будет удалить ее из заднего стека, когда пользователь завершит вход, чтобы предотвратить возврат к ней.
Поэтому вместо этого я решил, что перейду к FirstVM, и если теперь есть кэшированные учетные данные, я перейду к виртуальной машине входа. LoginVM просто вызовет закрытие и будет использовать сообщение, чтобы сообщить FirstVM, что оно может продолжаться как обычно.
Я делаю первоначальную реализацию в качестве приложения WinRT, и две проблемы, которые у меня есть со вторым вариантом:
Похоже, что нет хорошего события, которое можно было бы использовать для перехода к виртуальной машине входа в систему из FirstMV. Старт будет очевидным выбором, но это не позволит навигации, поэтому мне пришлось сделать следующее:
public async override void Start()
{
base.Start();
await Task.Delay(1);
ShowViewModel<LoginViewModel>();
}
Должен быть лучший метод!
Когда я вызываю close на LoginViewModel, отправленное вами сообщение получает FirstVM, но WinRT создает новый FirstVM и перемещается к этому экземпляру, а не к первому из них.
Вероятно, есть намного лучший способ сделать все это в любом случае!
благодаря
Росс
У WinRT есть другая модель навигации по умолчанию для WinPhone/Silverlight
Там есть хорошее объяснение этого на http://mikaelkoskinen.net/winrt-navigation-cache-or-why-going-back-to-previous-page-creates-a-new-instance-of-the-page/ - в том числе о том, как имитировать WinPhone