默认情况下,从 Xamarin.Forms 4.3 开始,当 Android 应用程序中的 ViewCell 为 ListView 中的每个项定义上下文操作时,若 ListView 中的选定项更改,则“上下文操作”菜单将更新。 但是,在以前版本的 Xamarin.Forms 中,上下文操作菜单未更新,此行为称为 ViewCell 旧模式。 如果 ListView 使用 DataTemplateSelector 从定义不同上下文操作的 DataTemplate 对象设置其 ItemTemplate,则此旧模式可能会导致行为不正确。
此特定于 Android 平台的方法启用 ViewCell 上下文操作菜单旧模式,用于实现后向兼容性,使得上下文操作菜单在 ListView 中的选定项更改时不更新。 在 XAML 中,可将 ViewCell.IsContextActionsLegacyModeEnabled 绑定属性设置为 true 来使用:
<ContentPage ...
             xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core">
    <StackLayout Margin="20">
        <ListView ItemsSource="{Binding Items}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell android:ViewCell.IsContextActionsLegacyModeEnabled="true">
                        <ViewCell.ContextActions>
                            <MenuItem Text="{Binding Item1Text}" />
                            <MenuItem Text="{Binding Item2Text}" />
                        </ViewCell.ContextActions>
                        <Label Text="{Binding Text}" />
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>
或者,可以使用 Fluent API 从 C# 使用它:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
该 ViewCell.On<Android> 方法指定此平台特定仅在 Android 上运行。 Xamarin.Forms.PlatformConfiguration.AndroidSpecific 命名空间中的 ViewCell.SetIsContextActionsLegacyModeEnabled 方法用于启用 ViewCell 上下文操作菜单旧模式,使得上下文操作菜单在 ListView 中选定项更改时不更新。 此外,ViewCell.GetIsContextActionsLegacyModeEnabled 方法还可用于返回是否启用上下文操作旧模式。
以下屏幕截图显示已启用 ViewCell 上下文操作旧模式:

在此模式下,显示的上下文操作菜单项对于单元格 1 和单元格 2 是相同的(尽管为单元格 2 定义了不同的上下文菜单项)。
以下屏幕截图显示已禁用 ViewCell 上下文操作旧模式,这是默认 Xamarin.Forms 行为:

在此模式下,为单元格 1 和单元格 2 显示正确的上下文操作菜单项。