Modern UI WPF - ручная навигация по страницам (из ViewModel или View\Control\code-behind)
У меня есть приложение MVVM, которое я пытаюсь перейти на Modern UI, но я не могу понять, что служба навигации...
По сути, моя ViewModel представляет собой ObservableCollection с методом AddItem, как ICommand
, Когда этот метод выполняется, я хочу переключиться обратно на первую ссылку \ страницу первой группы MUI, вот пример фрагмента Modern UI 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" (в группе "Open Work").
В идеале я хотел бы сделать это из ViewModel, но я не против присоединить обработчик к CollectionChanged
событие и ручная настройка страницы, но примеры Navigation Service ( здесь) не помогли мне понять это...
В качестве последнего средства я добавил MVVM Light от Nuget и попытался реализовать IModernNavigationService в своей ViewModel, но я не могу понять, как заставить ViewModelLocator работать.
1 ответ
Нашел ответ. Намного проще, чем я думал. В своем коде сзади 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);
}
}
}