2016-10-28 9 views
0

Весь день, я звонюNavigateAsync не перемещаться, когда ViewModel впрыскивается

await this.NavigationService.NavigateAsync(typeof(Views.MyStankView)); 

И все прекрасно работает. Пока я х: Bind кнопочный нажмите на другой ViewModel, который наследуется от (MVVM-Лайта) ViewModelBase и (Template10 в) INavigable, который имеет метод

public async Task NavigateToMyStankView(object sender, RoutedEventArgs e) 
{ 
    await this.NavigationService.NavigateAsync(typeof(Views.MyStankView)); 
} 

Вызов

await this.NavigationService.NavigateAsync(typeof(Views.MyStankView)); 

запускается на выполнение, но я никуда не иду. Изнутри этой модели просмотра и ее родителя ни OnNavigatingFrom get не вызывается. Нет ошибок, нет навигации.

Что дает? Почему навигационная система NavigateAsync с привязкой/вложением не перемещается? Пока «жесткая» модель просмотра перемещается?

РЕДАКТИРОВАТЬ: При дальнейшем осмотре, это.НавигацияСлужбы не имеет значения?!? Почему так?

+1

Не подлежит такой ответственности. Создать [MCVE] –

+0

Использует ли ваш класс 'App' в' App.xaml.cs' наследовать от 'Bootstrapper'? –

+0

Возможно опубликовать некоторые полные коды или поделиться базовым образцом, чтобы другие могли его исследовать. –

ответ

0

Ожидаемое поведение. Свойство NavigationService модели вашего вида моделируется NavigationService во время навигации. Что-то вроде ViewModel.NavigationService = this;. Если вы вводите модель представления, вы создаете ее, а не NavigationService, и поэтому свойство равно null. Но это еще не конец света. Вы можете легко обойти это, установив собственное свойство модели NavigationService самостоятельно, используя значение свойства из основной модели представления в качестве источника. Что-то вроде этого var vm = new MyViewModel { NavigationService = this.NavigationService, Dispatcher = this.Dispatcher };.

Хорошее эмпирическое правило, если свойство NavigationService равно null, вы не сможете с ним перемещаться. ;-) Просто дразня. Надеюсь, что эта обстановка имеет смысл.

Удачи.

+0

Спасибо за ответ, Джерри. Вы имеете в виду вот это? ждут этого. NavigationService.NavigateAsync (typeof (Views.MyStankView), новый MyStankViewModel {NavigationService = this.NavigationService}); , что приводит к этой ошибке (очень по поводу): Сообщение: Необработанное исключение типа «System.StackOverflowException» произошло в файле mscorlib.ni.dll – Maelstrom