Freigeben über


ViewCell-Kontextaktionen unter Android

Wenn eine ViewCell in einer Android-Anwendung standardmäßig Xamarin.Forms kontextbezogene Aktionen für jedes Element in einer ListViewAndroid-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:

Screenshot des aktivierten ViewCell-Legacymodus unter Android

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:

Screenshot des deaktivierten ViewCell-Legacymodus unter Android

In diesem Modus werden die richtigen Kontextmenüelemente für Zelle 1 und Zelle 2 angezeigt.