Hi I using a Xamarin Forms ListView and I want to know if I can disable the Context Actions based on a certain binding or in the code behind.
I am using one GroupedListView for the whole application but it displays different data based on what the user is doing. There is a "Manage your Favorites" feature where I want the user to be able to swipe-to-delete on iOS or long-press on android to remove a ListItem, but I do not want this behavior if the list is displaying some search result or something else
<ViewCell.ContextActions>
<MenuItem Text="Delete" IsDestructive="true" CommandParameter="{Binding .}" Command="{Binding Path=BindingContext.OnDeleteCommand, Source={x:Reference Name=ListViewPage}}"/>
</ViewCell.ContextActions>
This did not disable it...
<ViewCell.ContextActions IsEnabled="false"> //This IsEnabled does nothing
<MenuItem Text="Delete" IsDestructive="true" CommandParameter="{Binding .}" Command="{Binding Path=BindingContext.OnDeleteCommand, Source={x:Reference Name=ListViewPage}}"/>
</ViewCell.ContextActions>
How can I disable the ContextActions? I dont wan't the user to always be able to swipe
For what I wanted to achieve I did the following...
In the XAML
<ViewCell BindingContextChanged="OnBindingContextChanged">
In the code behind
private void OnBindingContextChanged(object sender, EventArgs e)
{
base.OnBindingContextChanged();
if (BindingContext == null)
return;
ViewCell theViewCell = ((ViewCell)sender);
var item = theViewCell.BindingContext as ListItemModel;
theViewCell.ContextActions.Clear();
if (item != null)
{
if (item.ListItemType == ListItemTypeEnum.FavoritePlaces
|| item.ListItemType == ListItemTypeEnum.FavoritePeople)
{
theViewCell.ContextActions.Add(new MenuItem()
{
Text = "Delete"
});
}
}
}
Based which type of list item we are dealing with, we get to decide where to place the context actions
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With