Android의 ViewCell 컨텍스트 작업
기본적으로 4.3부터 Xamarin.Forms Android 애플리케이션에서 각 항목ListView
에 대한 컨텍스트 동작을 정의하는 경우 ViewCell
상황에 맞는 작업 메뉴는 변경 내용에서 ListView
선택한 항목이 변경될 때 업데이트됩니다. 그러나 이전 버전의 Xamarin.Forms 상황에 맞는 작업 메뉴는 업데이트되지 않았으며 이 동작을 레거시 모드라고 ViewCell
합니다. 이 레거시 모드는 다른 컨텍스트 동작을 ListView
정의하는 개체에서 DataTemplate
설정하는 ItemTemplate
데 사용하는 DataTemplateSelector
경우 잘못된 동작이 발생할 수 있습니다.
이 Android 플랫폼별 기능을 사용하면 이전 버전과의 호환성을 위해 상황에 맞는 작업 메뉴 레거시 모드를 사용할 수 ViewCell
있으므로 선택한 항목 ListView
이 변경될 때 상황에 맞는 작업 메뉴가 업데이트되지 않습니다. 바인딩 가능한 속성을 true
다음으로 설정하여 XAML에서 ViewCell.IsContextActionsLegacyModeEnabled
사용합니다.
<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>
또는 흐름 API를 사용하여 C#에서 사용할 수 있습니다.
using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...
viewCell.On<Android>().SetIsContextActionsLegacyModeEnabled(true);
이 메서드는 ViewCell.On<Android>
이 플랫폼별이 Android에서만 실행되도록 지정합니다. ViewCell.SetIsContextActionsLegacyModeEnabled
네임스페이스의 메서드 Xamarin.Forms.PlatformConfiguration.AndroidSpecific
는 상황에 맞는 작업 메뉴 레거시 모드를 사용하도록 설정하는 ViewCell
데 사용되므로 선택한 항목 ListView
이 변경될 때 상황에 맞는 작업 메뉴가 업데이트되지 않습니다. 또한 이 메서드를 ViewCell.GetIsContextActionsLegacyModeEnabled
사용하여 컨텍스트 작업 레거시 모드가 사용되는지 여부를 반환할 수 있습니다.
다음 스크린샷은 컨텍스트 작업 레거시 모드를 사용하도록 설정된 것을 보여 ViewCell
줍니다.
이 모드에서는 셀 2에 대해 다른 상황에 맞는 메뉴 항목이 정의되어 있음에도 불구하고 표시된 상황에 맞는 작업 메뉴 항목은 셀 1과 셀 2에 대해 동일합니다.
다음 스크린샷은 기본 동작인 컨텍스트 작업 레거시 모드를 사용하지 않도록 설정됨을 Xamarin.Forms 보여 ViewCell
줍니다.
이 모드에서는 셀 1과 셀 2에 대해 올바른 상황에 맞는 작업 메뉴 항목이 표시됩니다.