UWP NavigationView навигация через MVVM - PullRequest
0 голосов
/ 27 декабря 2018

Я использую в качестве основного элемента управления в моем приложении NavigationView и у меня есть кадр, где страница загружается.

<NavigationView x:Name="MyNavView" IsBackButtonVisible="Collapsed" SelectionChanged="{x:Bind ViewModel.OnSelectionChanged}" PaneDisplayMode="Top">
    <NavigationView.MenuItems>
        <NavigationViewItem Icon="Contact" Content="Contact" Tag="MasterDetailPage"/>
        <NavigationViewItem Icon="Favorite" Content="Favorites" Tag="FavoritesPage"/>
    </NavigationView.MenuItems>
    <Frame x:Name="RootFrame"/>
</NavigationView>

Существует два события SelectionChanged и ItemInvoked , которые позволяют осуществлять навигацию по страницам, которые загружаются в RootFrame (имя моегоРамка).Но я хочу использовать Command для создания MVVM.И я не нашел Command prop даже для самого NavigationView или для NavigationViewItem .После этого я обработал событие SelectionChanged во ViewModel, но, на мой взгляд, это противоречит MVVM.

Итак, как мне сделать MVVM с помощью Command?Если такой возможности нет, расскажите, как реализовать сам MVVM, не обрабатывая событие.

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Чтобы узнать, как правильно использовать элемент управления NavigationView (включая случай привязки данных), обратитесь к сопутствующему приложению Галерея элементов управления XAML , доступному в Магазине Windows, от Microsoft.

С уважением

0 голосов
/ 04 февраля 2019

Реализация этого очень похожа на то, как вы это делаете для WPF, вам нужно начать с установки пакета Microsoft.Xaml.Behaviors.Uwp.Managed через NuGet.Затем вы добавляете поведение в свой NavigationView:

xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"

<NavigationView MenuItemsSource="{x:Bind ViewModel.MenuItems}">

    <i:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="ItemInvoked">
            <core:EventTriggerBehavior.Actions>
                <core:InvokeCommandAction Command="{x:Bind ViewModel.ItemInvokedCommand}" />
            </core:EventTriggerBehavior.Actions>
        </core:EventTriggerBehavior>
    </i:Interaction.Behaviors>

Я использую x:Bind здесь для проверки ошибок во время компиляции, но обычный Binding будет работать так же хорошо, конечно.В любом случае, следуйте этому с помощью обработчика команд в вашей модели представления так же, как для WPF:

0 голосов
/ 27 декабря 2018

Попробуйте использовать Windows Template Studio , это решило мою проблему при объединении NavigationView с MVVM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...