通过MVVM UWP NavigationView导航

问题描述 投票:2回答:3

我使用的是在我的应用程序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(我的框架的名称)的页面。但我想用命令使MVVM。而且我还没有发现命令道具甚至NavigationView本身或NavigationViewItem。从那以后,我在视图模型已经处理SelectionChanged事件,但在我看来,它违背MVVM。

那么,如何才能让使用Command MVVM?如果没有这样的机会,告诉如何实现MVVM本身不处理事件。

c# mvvm uwp navigation
3个回答
4
投票

实现这个是非常相似的,你如何做到这一点的WPF,你需要通过的NuGet安装包Microsoft.Xaml.Behaviors.Uwp.Managed开始。然后添加一个行为,你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跟进:

private ICommand _ItemInvokedCommand;
public ICommand ItemInvokedCommand => this._ItemInvokedCommand ?? (this._ItemInvokedCommand = new RelayCommand<NavigationViewItemInvokedEventArgs>(OnItemInvoked));


private void OnItemInvoked(NavigationViewItemInvokedEventArgs args)
{
    // could also use a converter on the command parameter if you don't like
    // the idea of passing in a NavigationViewItemInvokedEventArgs
    this.NavigationService.NavigateTo(args.InvokedItem);

3
投票

尝试使用Windows Template Studio,它与MVVM结合NavigationView时解决我的问题


1
投票

为了了解如何正确使用NavigationView控制(包括数据绑定的情况下),请参阅名为XAML的配套应用控件库,可在Windows商店,微软。

最好的祝福

© www.soinside.com 2019 - 2024. All rights reserved.