Прежде всего, если вы хотите добиться такого результата.
Here is a workaround about hide a items in MenuItem
.
First of all, you need to create two DataTemplate
like following code. Note: you must add CachingStrategy="RecycleElement"
in the listview
, add it, DataTemplate will chanage dynamically in the Listview
.
Затем вы должны создать DataTemplateSelector
, чтобы переключить эти два DataTemplate
.
public class ItemDataTemplateSelector : DataTemplateSelector
{
public DataTemplate OneItemTemplate { get; set; }
public DataTemplate TwoItemsTemplate { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
return ((ContextMenuItem)item).Type == ContextMenuItemType.OneItem ? OneItemTemplate : TwoItemsTemplate;
}
}
Во Viewmodel он изменит DataTemplate (для тестирования Я просто установил два элемента на один, вы можете изменить его по своему усмотрению).
public ICommand MyToggleLegacyMode { get; set; }
public ObservableCollection<ContextMenuItem> Items { get; private set; }
public AndroidViewCellPageViewModel()
{
IsContextActionsLegacyModeEnabled = false;
Items = new ObservableCollection<ContextMenuItem>();
Items.Add(new ContextMenuItem { Text = "Cell 1", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 2", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 3", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 4", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 5", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 6", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 7", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 8", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 9", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 10", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 11", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 12", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 13", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 14", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 15", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 16", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 17", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 18", Type = ContextMenuItemType.TwoItems });
Items.Add(new ContextMenuItem { Text = "Cell 19", Type = ContextMenuItemType.OneItem });
Items.Add(new ContextMenuItem { Text = "Cell 20", Type = ContextMenuItemType.TwoItems });
MyToggleLegacyMode = new Command((key) => {
var contextMenuItem=key as ContextMenuItem;
contextMenuItem.Type = ContextMenuItemType.OneItem;
});
}
Вот моя демонстрация, вы можете обратиться к ней. https://github.com/851265601/Xamarin.Android_ListviewSelect/blob/master/XFormsLabel.zip