The SfListView allows adding an item at the specific index in a group by finding the group with the help of Key value of the group.
internal void GetGroupResult(object ItemData)
{
var descriptor = listView.DataSource.GroupDescriptors[0];
object key;
if (descriptor.KeySelector == null)
{
var propertyInfoCollection = new PropertyInfoCollection(ItemData.GetType());
key = propertyInfoCollection.GetValue(ItemData, descriptor.PropertyName);
}
else
key = descriptor.KeySelector(ItemData);
for (int i = 0; i < this.listView.DataSource.Groups.Count; i++)
{
var group = this.listView.DataSource.Groups[i];
if ((group.Key != null && group.Key.Equals(key)) || group.Key == key)
{
itemGroup = group;
break;
}
group = null;
}
itemGroup = this.listView.DataSource.Groups.FirstOrDefault(x => x.Key == key);
descriptor = null;
key = null;
}
To add item at specific index in a group, follow the code example
using Syncfusion.ListView.XForms.Control.Helpers;
private void AddItem_Clicked(object sender, EventArgs e)
{
var contact = new Contacts();
contact.ContactName = "Adam";
contact.ContactNumber = "783-457-567";
contact.DisplayString = "A";
contact.ContactImage = ImageSource.FromResource("Grouping.Images.Image" + 25 + ".png");
ViewModel.ContactItems.Add(contact);
GetGroupResult(contact);
if (itemGroup == null)
return;
var items = itemGroup.GetType().GetRuntimeProperties().FirstOrDefault(x => x.Name == "ItemList").GetValue(itemGroup) as List<object>;
InsertItemInGroup(items, contact, 0);
}
internal void InsertItemInGroup(List<object> items, object Item, int InsertAt)
{
visualContainer = listView.GetVisualContainer();
items.Remove(Item);
items.Insert(InsertAt, Item);
visualContainer.ForceLayout();
}
To know more about grouping, please refer our documentation here