2X faster development
The ultimate Xamarin UI toolkit to boost your development speed.
You can retrieve the drag index of ListViewItem in ViewModel using the Prism framework DelegateCommand in Xamarin.Forms SfListView. XAML EventToCommandBehavior to convert the ItemDragging event to a command and set ListView behavior. <syncfusion:SfListView x:Name="listView" Grid.Row="1" ItemSize="60" BackgroundColor="#FFE8E8EC" GroupHeaderSize="50" ItemsSource="{Binding ToDoList}" DragStartMode="OnHold,OnDragIndicator" SelectionMode="None"> <syncfusion:SfListView.Behaviors> <local:EventToCommandBehavior EventName="ItemDragging" Command="{Binding ItemDraggingCommand}"/> </syncfusion:SfListView.Behaviors> <syncfusion:SfListView.ItemTemplate> <DataTemplate> <Frame HasShadow="True" BackgroundColor="White" Padding="0"> <Frame.InputTransparent> <OnPlatform x:TypeArguments="x:Boolean" Android="True" iOS="False"/> </Frame.InputTransparent> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="60" /> </Grid.ColumnDefinitions> <Label x:Name="textLabel" Text="{Binding Name}" FontSize="15" TextColor="#333333" VerticalOptions="Center" HorizontalOptions="Start" Margin="5,0,0,0" /> <syncfusion:DragIndicatorView Grid.Column="1" ListView="{x:Reference listView}" HorizontalOptions="Center" VerticalOptions="Center"> <Grid Padding="10, 20, 20, 20"> <Image Source="DragIndicator.png" VerticalOptions="Center" HorizontalOptions="Center" /> </Grid> </syncfusion:DragIndicatorView> </Grid> </Frame> </DataTemplate> </syncfusion:SfListView.ItemTemplate> </syncfusion:SfListView> C# Create command for the ItemDragging event with the ItemDraggingEventArgs parameter. You can access the item index from NewIndex field of the ItemDraggingEventArgs. public class ViewModel { public DelegateCommand<ItemDraggingEventArgs> ItemDraggingCommand { get; set; } public ViewModel() { ItemDraggingCommand = new DelegateCommand<ItemDraggingEventArgs>(OnItemDragging); } private void OnItemDragging(ItemDraggingEventArgs args) { if (args.Action == DragAction.Drop) App.Current.MainPage.DisplayAlert("Message", "ListView item index after reordering " + args.NewIndex, "Ok"); } } Output |
2X faster development
The ultimate Xamarin UI toolkit to boost your development speed.
This page will automatically be redirected to the sign-in page in 10 seconds.
I've copied the code and I get following error as soon as dragging happens.
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Adding
if (args is null) return;
in the onitemdragging function shows that args is never anything but a null value. Thoughts?
SOLUTION TO THE ISSUE ...
You need to copy over the folder Helper containing BehaviorBase.cs / EventToCommandBehavior.cs into your project. Ensure that your page is set to xmlns:local to your namespace not PRISMLIBRARY.com
Hi Steven,
Greetings from Syncfusion.
You can refer to our online document to use Prism framework EventToCommandBehavior with default event args from the following link, KB link: https://www.syncfusion.com/kb/11680/how-to-work-with-prism-using-the-eventtocommandbehavior-in-xamarin-forms-listview
Regards, Lakshmi Natarajan