2016-05-04 3 views
0

Я пытался с этим:Как подписаться на навигационное событие Prism?

public MyViewModel() 
{ 
    eventAggregator.GetEvent<ImportProgressReadyEvent().Subscribe(SubscriberMethod); 
} 

и она работает, но SubscriberMethod(), конечно, будет вызван на строительстве до страницы навигации и видим. Есть ли способ подписаться на какой-либо обработчик событий (я предполагаю, что это «Navigated»), который будет вызван после того, как будет выполнена навигация? Так что в моем ViewModel у меня есть что-то вроде этого:

private void WhenNavigated() 
     { 
      eventAggregator.GetEvent<ImportProgressReadyEvent>().Subscribe(SubscriberMethod); 
     } 
+0

В классе ['Frame'] есть событие« Навигация »(https://msdn.microsoft.com/en-us/library/system.windows.controls.frame_events (v = vs.110) .aspx), поэтому вы можете подключиться к этому, но это требует, чтобы у вас был «Frame» в вашем XAML. – ChrisF

+0

Что вы подразумеваете под _SubscriberMethod(), конечно, вызывается по строительству_? Метод в 'Подписаться' должен вызываться только в том случае, если' '' Публикация' произошла на 'ImportProgressReadyEvent' –

+0

Да, я это понимаю, но мне нужно что-то определить, когда« WhenNavigated() »называется – Ivan

ответ

1

Вы упомянули, что вы хотите знать об этом событии в вашей ViewModel, так что я думаю, что вы ищете интерфейс INavigationAware. У него есть три метода:

public interface INavigationAware 
{ 
    bool IsNavigationTarget(NavigationContext navigationContext); 
    void OnNavigatedFrom(NavigationContext navigationContext); 
    void OnNavigatedTo(NavigationContext navigationContext); 
} 

OnNavigatedTo уволит после того, как представление было перемещаться к и ViewModel с интерфейсом импортировано/создано. Вы можете использовать параметр NavigationContext для передачи информации между видами.

+0

Да, я думал о это тоже. проблема в том, что, когда я пытаюсь расширить этот интерфейс, он говорит: «не реализует член интерфейса» Prism.Regions.INavigationAware.IsNavigationTarget (Prism.Regions.NavigationContext) ' – Ivan

+0

Вам нужно будет реализовать все три метода. Им не нужно ничего делать, и «IsNavigationTarget» может просто быть жестко запрограммирован, чтобы вернуть «true». –

+0

Да, это работает, но опять же, «OnNavigatedTo» вызывается до появления представления, чего я не хочу :( – Ivan

Смежные вопросы