ViewCell-Kontextaktionen unter Android
Wenn eine ViewCell
in einer Android-Anwendung standardmäßig Xamarin.Forms kontextbezogene Aktionen für jedes Element in einer ListView
Android-Anwendung definiert, wird das Kontextmenü aktualisiert, wenn sich das ausgewählte Element in den ListView
Änderungen befindet. In früheren Versionen des Xamarin.Forms Kontextmenüs wurde jedoch nicht aktualisiert, und dieses Verhalten wird als ViewCell
Legacymodus bezeichnet. Dieser Legacymodus kann zu einem falschen Verhalten führen, wenn ein Objekt ListView
DataTemplateSelector
zum Festlegen seiner ItemTemplate
Objekte DataTemplate
verwendet wird, die unterschiedliche Kontextaktionen definieren.
Diese plattformspezifische Android-Plattform aktiviert den Legacymodus des ViewCell
Kontextmenüs, sodass das Kontextmenü nicht aktualisiert wird, wenn sich das ausgewählte Element in einer ListView
Änderung ändert. Sie wird in XAML genutzt, indem sie die ViewCell.IsContextActionsLegacyModeEnabled
bindungsfähige Eigenschaft auf true
setzt:
<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>
Alternativ kann sie mit der Fluent-API von C# genutzt werden:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
Die ViewCell.On<Android>
Methode gibt an, dass diese plattformspezifisch nur auf Android läuft. Die ViewCell.SetIsContextActionsLegacyModeEnabled
Methode im Xamarin.Forms.PlatformConfiguration.AndroidSpecific
Namespace wird verwendet, um den Legacymodus des ViewCell
Kontextmenüs zu aktivieren, sodass das Kontextmenü nicht aktualisiert wird, wenn sich das ausgewählte Element in einer ListView
Änderung ändert. Darüber hinaus kann die ViewCell.GetIsContextActionsLegacyModeEnabled
Methode verwendet werden, um zurückzugeben, ob der Legacymodus für Kontextaktionen aktiviert ist.
In den folgenden Screenshots sind ViewCell
kontextbezogene Aktionen im Legacymodus aktiviert:
In diesem Modus sind die angezeigten Kontextmenüelemente für Zelle 1 und Zelle 2 identisch, obwohl für Zelle 2 verschiedene Kontextmenüelemente definiert werden.
Die folgenden Screenshots zeigen ViewCell
kontextbezogene Aktionen im Legacymodus deaktiviert, was das Standardverhalten Xamarin.Forms ist:
In diesem Modus werden die richtigen Kontextmenüelemente für Zelle 1 und Zelle 2 angezeigt.