2016-11-28 1 views
0

Я хочу, чтобы пользователь не мог перейти от страницы, если я обнаруживаю, что есть изменения, которые они еще не сохранили.Регистрация в NavigationService для предотвращения NavigateAway (сохранить изменения)

Я попытался использовать метод Unloaded на Page, но я считаю, что уже слишком поздно, и я не мог использовать e.Cancel = true для предотвращения навигации.

Я уже встречал несколько вопросов, и они предложили подписаться на мероприятие NavigationService.Navigate и предотвратить навигацию здесь. Я попытался получить к нему доступ, используя var nav = new NavigationService.GetNavigationService(this);, но я знаю, что это неверно.

В принципе, я не могу найти объяснение того, как подписаться и предотвратить навигацию NavigationService.

+0

Зачем пытаться предотвратить это? почему бы не реализовать шаблон IsDirty для ваших свойств, и когда это возвращает true, спросите пользователя, хочет ли он по-прежнему перемещаться. Таким образом, вы никогда не столкнетесь с навигацией в первую очередь. – SilentStorm

+0

@SilentStorm, по существу, я хочу сделать - я просто не знаю, как спросить пользователя перед наступлением навигации (например, они закрывают программу или нажимают на новую страницу). – CBreeze

ответ

0

Вы могли бы реализовать интерфейс IConfirmNavigationRequest на ВМ

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) 
    { 
     if (VM.HasChanges) 
     { 
      continuationCallback(false); 
     } 
     else 
      continuationCallback(true); 
    } 

Но это также зависит, как вы навигации к вашему мнению. Вы используете VIEW-открытие или View injection? Если вы используете навигационную службу PRISM для управления вашей навигацией (т. Е. С помощью функции RegionManager.RequestNavigate()), то вышеприведенный подход хорош.

+0

Я просто использую 'NavigationService.Navigate' для навигации по страницам, размещенным внутри' NavigationFrame'. – CBreeze