Android'de ViewCell Bağlam Eylemleri
Varsayılan olarak 4.3'ten itibaren Xamarin.Forms , bir Android uygulamasındaki bir ViewCell
içindeki her öğe ListView
için bağlam eylemleri tanımladığında, seçilen öğe değiştiğinde ListView
bağlam eylemleri menüsü güncelleştirilir. Ancak, bağlam eylemleri menüsünün Xamarin.Forms önceki sürümlerinde güncelleştirilmemiş ve bu davranış eski mod olarak ViewCell
adlandırılır. Bu eski mod, farklı bağlam eylemlerini ItemTemplate
tanımlayan nesnelerden DataTemplate
ayarlamak için bir ListView
DataTemplateSelector
kullanırsa yanlış davranışa neden olabilir.
Bu Android platformuna ViewCell
özgü, geriye dönük uyumluluk için bağlam eylemleri menüsü eski modunu etkinleştirir, böylece bağlam eylemleri menüsü bir ListView
değişiklikte seçili öğe değiştiğinde güncelleştirilmez. XAML'de bindable özelliği true
olarak ayarlanarak ViewCell.IsContextActionsLegacyModeEnabled
kullanılır:
<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>
Alternatif olarak, akıcı API kullanılarak C# dilinden de kullanılabilir:
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
yöntemi, ViewCell.On<Android>
platforma özgü bu uygulamanın yalnızca Android'de çalışacağını belirtir. ViewCell.SetIsContextActionsLegacyModeEnabled
ad alanında Xamarin.Forms.PlatformConfiguration.AndroidSpecific
yöntemi, bağlam eylemleri menüsünün eski modunu etkinleştirmek ViewCell
için kullanılır, böylece bağlam eylemleri menüsü, ListView
seçilen öğe değiştiğinde güncelleştirilmez. Ayrıca, ViewCell.GetIsContextActionsLegacyModeEnabled
bağlam eylemleri eski modunun etkinleştirilip etkinleştirilmediğini döndürmek için yöntemi kullanılabilir.
Aşağıdaki ekran görüntüleri, bağlam eylemleri eski modunun etkin olduğunu gösterir ViewCell
:
Bu modda, görüntülenen bağlam eylemi menü öğeleri, 2. hücre için farklı bağlam menüsü öğelerinin tanımlanmasına rağmen 1. ve 2. hücre için aynıdır.
Aşağıdaki ekran görüntüleri, varsayılan Xamarin.Forms davranış olan bağlam eylemleri eski modunun devre dışı bırakıldığı gösterirViewCell
:
Bu modda, 1. ve 2. hücre için doğru bağlam eylemi menü öğeleri görüntülenir.