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);
            }
        }
    }
Другие вопросы по тегам