Переход UWP NavigationView на другую страницу через MVVM

Впервые переключившись с WPF на UWP, я обнаружил, что в мире UWP существуют отличные элементы управления, такие как SplitView и NavgiationView.

Для обновления моего текущего домашнего проекта я выбрал элемент управления NavigationView в качестве основного элемента управления пользовательского интерфейса для предоставления различной информации. Использование кода программной части для навигации по странице (как показано здесь) очень просто, но для моего варианта использования я хочу работать с MVVM (в качестве процедуры обучения без использования встроенных программ, таких как MVVMLIght или аналогичных).

В настоящее время мой NavigationView выглядит так; но у меня нет правильного представления о том, как изменять внутри фрейма на страницах (насколько я понимаю, я должен использовать NavigationService, но не нашел простого для понимания примера этого):

<NavigationView x:Name="nvTopLevelNav" Grid.Column="0" Grid.Row="1" Grid.RowSpan="3" IsPaneOpen="False"  IsPaneToggleButtonVisible="False" CompactModeThresholdWidth="0" IsBackButtonVisible="Collapsed" Background="Black" Foreground="Black"
        Loaded="nvTopLevelNav_Loaded"
        Margin="0,12,0,0"
        SelectionChanged="nvTopLevelNav_SelectionChanged"
        ItemInvoked="nvTopLevelNav_ItemInvoked"
        IsTabStop="False"
                IsSettingsVisible="False"
                AlwaysShowHeader="False"
        Header="asdasdaasdasdasd">
    <NavigationView.MenuItems>
        <NavigationViewItem Icon="Home" Content="Home" Tag="Home_Page" />
        <NavigationViewItem Icon="Globe" Content="Weather" Tag="Weather_Page" />
        <NavigationViewItem Content="My Agenda" Tag="Agenda_Page">
    <!-- some custom PathIcon -->
        </NavigationViewItem>
        <NavigationViewItem Icon="Contact" Content="My News" Tag="News_Page" />
    </NavigationView.MenuItems>
    <Frame x:Name="contentFrame"></Frame>
</NavigationView>

person mbed_dev    schedule 17.10.2018    source источник


Ответы (1)


Переход UWP NavigationView на другую страницу через MVVM

По вашему запросу вы можете использовать Windows Template Studio для создания проекта UWP, содержащего шаблон MVVM. и NavigationService.

private void OnItemInvoked(NavigationViewItemInvokedEventArgs args)
{
    if (args.IsSettingsInvoked)
    {
        NavigationService.Navigate(typeof(SettingsViewModel).FullName);
        return;
    }

    var item = _navigationView.MenuItems
                    .OfType<NavigationViewItem>()
                    .First(menuItem => (string)menuItem.Content == (string)args.InvokedItem);
    var pageKey = item.GetValue(NavHelper.NavigateToProperty) as string;
    NavigationService.Navigate(pageKey);
}

введите описание изображения здесь

person Nico Zhu - MSFT    schedule 18.10.2018
comment
Я должен признать, что это решение, но код на самом деле не требует пояснений. Он использует ActionServices, которые для меня совершенно новые. Но все равно спасибо - person mbed_dev; 21.10.2018