2016-09-14 12 views
0

У меня есть приложение MVVM, которое я пытаюсь переместить в современный пользовательский интерфейс, но я не могу понять, что такое Навигация Сервис ...Современный пользовательский интерфейс WPF - ручная навигационная страница (из ViewModel или View Control code-behind)

В принципе, моя ViewModel является ObservableCollection с методом AddItem, как ICommand. Когда этот метод выполняется, я хочу, чтобы вернуться к первой Рынок Mui группы 1 Link \ Page, вот пример сниппет современного пользовательского интерфейса WPF ...

<mui:ModernWindow ...> 
    <mui:ModernWindow.MenuLinkGroups> 
     <mui:LinkGroup DisplayName="Open Work"> 
      <mui:LinkGroup.Links> 
       <mui:Link DisplayName="Current Activity" Source="/Pages/ActivityPage.xaml" /> 
       <mui:Link DisplayName="Activity Queue" Source="/Pages/Queue.xaml" /> 
      </mui:LinkGroup.Links> 
     </mui:LinkGroup> 
     <mui:LinkGroup DisplayName="Search" > 
      <mui:LinkGroup.Links> 
       <mui:Link DisplayName="Customers" Source="/Pages/SearchPage.xaml" /> 
      </mui:LinkGroup.Links> 
     </mui:LinkGroup> 
    </mui:ModernWindow.MenuLinkGroups> 

Так в основном, из «SearchPage.xaml», выполняется ICommand «AddItem», и я хочу немедленно переключиться на «ActivityPage.xaml» (в группе «Открыть работу»).

В идеале, я хотел бы сделать это из ViewModel, но я не возражаю против добавления обработчика события CollectionChanged и вручную установки страницы, но образцы NavigationService (here) мне не помогли этот один из ...

В качестве последнего средства я добавил MVVM Light от Nuget, и я попытался реализовать IModernNavigationService в моей модели ViewModel, но я не могу понять, как заставить ViewModelLocator работать.

ответ

0

Найден ответ. Гораздо проще, чем я думал. В моем кодовом коде ModernWindow я добавляю следующий обработчик события CollectionChanged:

private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     if(e.NewItems.Count > 0) 
     { 
      try 
      { 
       ContentSource = MenuLinkGroups.First().Links.First().Source; 
      } 
      catch (Exception error) 
      { 
       ModernDialog.ShowMessage(error.Message, FirstFloor.ModernUI.Resources.NavigationFailed, MessageBoxButton.OK); 
      } 
     } 
    } 
Смежные вопросы