Android 上的 ViewCell 上下文操作
默认情况下,从 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 显示正确的上下文操作菜单项。