Thank you for your help, but it didn't work.
My Code :
XAML:
<syncfusion:SfListView x:Name="listView"
Grid.Row="0"
ItemsSource="{Binding ListFields}"
DragStartMode="OnDragIndicator"
ItemSize="60"
ItemDragging="listView_ItemDragging"
IsStickyGroupHeader="True"
HeightRequest="60">
<syncfusion:SfListView.ItemTemplate>
<DataTemplate>
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="60" />
</Grid.ColumnDefinitions>
<sfbutton:SfSwitch Grid.Column="0" IsOn="{Binding Check}" StateChanged="SfSwitch_StateChanged"/>
<Label x:Name="textLabel" Text="{Binding Libelle}" Grid.Column="1" FontSize="15" TextColor="#333333" VerticalOptions="Center"/>
<syncfusion:DragIndicatorView Grid.Column="2" ListView="{x:Reference listView}" HorizontalOptions="Center" VerticalOptions="Center">
<Grid >
<Label Text="{StaticResource IconDragVertical}" FontFamily="{StaticResource MaterialFontFamily}" FontSize="24" HorizontalOptions="Start" VerticalOptions="Center"/>
</Grid>
</syncfusion:DragIndicatorView>
</Grid>
</DataTemplate>
</syncfusion:SfListView.ItemTemplate>
</syncfusion:SfListView>
Code behind :
public SelectedFieldPage()
{
InitializeComponent();
this.listView.DataSource.GroupDescriptors.Add(new GroupDescriptor()
{
PropertyName = "Check",
KeySelector = (object obj1) =>
{
var item = (obj1 as Field);
return (item.Check ? "Champs Visibles" : "Champs Disponibles");
}
});
this.listView.DataSource.LiveDataUpdateMode = LiveDataUpdateMode.AllowDataShaping;
this.listView.DragDropController.UpdateSource = true;
BindingContext = viewModel = new SelectedFieldViewModel();
}
private void listView_ItemDragging(object sender, Syncfusion.ListView.XForms.ItemDraggingEventArgs e)
{
var field = (Field)e.ItemData;
if (e.Action == DragAction.Start && !field.Check)
e.Cancel = true;
}
private void SfSwitch_StateChanged(object sender, Syncfusion.XForms.Buttons.SwitchStateChangedEventArgs e)
{
var button = sender as SfSwitch;
var field = button.BindingContext as Field;
listView.DataSource.Groups.RemoveItemInGroup(field);
viewModel.ListFields.Add(field);
}
If a have the list : A / B / C
=> Groups[0] : A / B / C
An I switch the A and B ==> B / A / C
The Groups[0] is always A / B / C
Thanks for your help.
Maxence