问题描述
<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);
}