无法使InvokedItemContainer与Android一起使用

问题描述

我有一个类似的NavigationView:

<NavigationView 
        Name="NavView" 
        PaneTitle="Games" 
        PanedisplayMode="Auto" 
        ItemInvoked="NavView_ItemInvoked"
        IsSettingsVisible="False"
        MenuItemsSource="{x:Bind games}">
        <NavigationView.MenuItemTemplate>
            <DataTemplate x:DataType="data:Game">
                <NavigationViewItem Tag="{x:Bind id,Mode=TwoWay}" Content="{x:Bind GameName}" Icon="Play"/>
            </DataTemplate>
        </NavigationView.MenuItemTemplate>
        <Frame Name="ContentFrame" Margin="0,20,0"/>
    </NavigationView>

UI部分和绑定有效,但是InvokedItemContainer / ItemInvoked在Android上似乎不起作用。方法如下:

private void NavView_ItemInvoked(NavigationView sender,NavigationViewItemInvokedEventArgs args)
{
        string id = args.InvokedItemContainer.Tag.ToString();
        Guid guid = new Guid(id);
        ContentFrame.Navigate(typeof(leaderboard),guid);
}

在Android上单击NavigationViewItem无效,但在UWP上正常运行。我已经进行了一些测试,结果发现,在InvokedItemContainer语句之后输入的所有内容都将被忽略,因此我只能在UWP调试中正常运行。

解决方法

uno.ui当前存在一个问题,其中在NavigationItem中使用DataTemplate中的MenuItemTemplate会导致InvokedItemContainer为空。

作为解决方法,您可以直接通过InvokedItem访问数据上下文:

if (args.InvokedItem is Game game)
{
    ContentFrame.Navigate(typeof(Leaderboard),game.id);
}