Лучший способ загрузить сгруппированную коллекцию в Xamarin.Forms ListView/CollectionView с добавочной загрузкой

Как лучше всего загрузить сгруппированную коллекцию в Xamarin.Forms ListView / CollectionView с добавочной загрузкой?

Например, скажем, коллекция содержит несколько групп, и каждая группа содержит список элементов.

      [
    [123, 143, 341234, 234234, 514232, 23511, 673456, ...],
    [12, 143, 341234, 234234, 514232, 23511, , ...],
    [12, 143, 341234, 234234, 514232, 23511, 313, ...],
    [12, 143, 341234, 514232, 23511, 673456, ...],
    [12, 143, 341234, 234234, 514232, 132, 23511, 673456, ...],
    .
    .
    .
    [12, 143, 341234, 234234, 514232, 23511, 673456, ...],
]

Обновлять

С одномерным списком я мог загружать данные в ListView или CollectionView, используя ListView.ItemAppearing/ CollectionView.RemainingItemsThresholdReached События.

Бесконечная прокрутка с Xamarin.Forms CollectionView

Загрузить больше элементов в конце ListView в Xamarin.Forms

      listView.ItemAppearing += ListView_ItemAppearing;
IList<Item> originalList = new List<Item> {Item1, ..., Item10000};

private void ListView_ItemAppearing(object sender, ItemVisibilityEventArgs e)
{
    if (// all the items in the original list loaded into the listview) 
    {
        listView.ItemAppearing -= ListView_ItemAppearing;
    }
    else
    {
        // Add next set of items from the original list to the listview
    }
}

Поэтому меня беспокоит, что было бы наилучшим способом (или наилучшей практикой) для постепенной загрузки сгруппированной коллекции в ListView или CollectionView?

1 ответ

Чтобы загрузить сгруппированную коллекцию, я добавляю дополнительные данные в ItemsSource, например:

          PersonViewModel pvm = new PersonViewModel();
           private  ObservableCollection<PersonGroup> myitems = new ObservableCollection<PersonGroup>();
            public TestGroup()
            {
    
                InitializeComponent();
                myitems = pvm.Persons;
                //set collectionview
                mycol.ItemsSource =myitems;
                mycol.RemainingItemsThreshold = 2;
                mycol.RemainingItemsThresholdReached += Mycol_RemainingItemsThresholdReached;
            }
    
            private void Mycol_RemainingItemsThresholdReached(object sender, EventArgs e)
            {
               
                for (int i = 0; i <= 3; i++)
                {
                    myitems.Add(new PersonGroup("plusgroup", new List<Person> { new 
                    Person { name="plus1",
                    address="11111"},
                   new Person { name="plus2",
                    address="22222"}
    
                     }));
                }
            }

Вот моя модель просмотра и модель:

      public class PersonViewModel {


    public ObservableCollection<PersonGroup> Persons { get; set; } = new ObservableCollection<PersonGroup>();

    public List<Person> peoplelist = new List<Person>();

    public PersonViewModel()

    {

        for (int k = 1; k <= 3; k++)

        {

           peoplelist.Add(new Person
            {
                name = "People" + k.ToString(),

                address = "somewhere"+k.ToString()
            });

        }


        for (int i = 1; i < 50; i++)

        {

            Persons.Add(new PersonGroup("Group" + i.ToString(), peoplelist));

        }

    }
}

Модель:

      public class PersonGroup{
    public string GroupName { set; get; }
    
            public  PersonGroup(string name,List<Person>persons):base(persons)
            {
                GroupName = name;
            }
    
        }

результат:

Другие вопросы по тегам