UWP 导航通过 MVVM 查看导航



>我在我的应用程序导航视图中用作主控件,并在加载页面时使用了框架。

<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>

有两个事件 SelectionChangedItemInvoked 可用于实现导航到在 RootFrame(我的框架的名称)中加载的页面。但是我想使用命令来制作MVVM。我甚至没有找到NavigationView本身或NavigationViewItem的命令道具。之后,我在ViewModel中处理了SelectionChanged事件,但在我看来它与MVVM相矛盾。

那么,如何使用命令制作 MVVM?如果没有这样的机会,请告诉如何实现 MVVM 本身不处理事件。

实现这一点与为 WPF 执行此操作的方式非常相似,您需要首先通过 NuGet 安装 Microsoft.Xaml.Behaviors.Uwp.Managed 包。然后,将行为添加到导航视图:

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);

尝试使用Windows Template Studio,它解决了我将NavigationView与MVVM结合使用时的问题<</p>

div class="one_answers">

若要了解如何正确使用 NavigationView 控件(包括数据绑定情况),请参阅 Windows 应用商店中提供的名为 XAML 控件库的配套应用,按 Microsoft 提供。

此致敬意

相关内容

  • 没有找到相关文章

最新更新