【问题标题】:Unable to get InvokedItemContainer working with Android无法让 InvokedItemContainer 与 Android 一起使用
【发布时间】:2020-09-02 06:22:28
【问题描述】:

我有一个这样的 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,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);
}

单击NavigationViewItem 在 Android 上没有任何作用,但在 UWP 上可以正常工作。我做了一些测试,结果发现,我在 InvokedItemContainer 语句之后放置的任何内容都被忽略了,所以我只能在 UWP 中调试,一切正常。

【问题讨论】:

    标签: c# uwp-xaml uno-platform


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2014-10-31
      • 2018-01-02
      • 2016-11-14
      • 2015-02-01
      • 2019-05-10
      • 2017-11-20
      相关资源
      最近更新 更多