Как отобразить сгруппированный список значений в Xamarin?

#list #xamarin

#Список #xamarin

Вопрос:

Я пытаюсь отобразить сгруппированный список песен, который я получаю с сервера. Песни группируются в наборы в соответствии с их первой буквой. Для этой цели я создал два класса SongSet и Song.

  public class SongSet
    {
        public string FirstCharacter { get; set; }
        public List<Song> ListOfSongs { get; set; } = new List<Song>(); 
       
        public SongSet(string firstChar)
        {
            this.FirstCharacter = firstChar;
        }
    }
  
    public class Song
    {
        public string SongTitle { get; set; }
        public Song(string title)
        {
            this.SongTitle = title;
        }
    }
  

После получения списка с сервера я помещаю его в список объектов набора песен.

 public static List<SongSet> ListOfSongsFromServer { get; set; } = new List<SongSet>();

  

И вот мой код для отображения целого списка.

 
 ListView listView = new ListView
            {
                IsGroupingEnabled = true,
                GroupDisplayBinding = new Binding("FirstCharacter"),
                ItemsSource = PlayerPageVM.ListOfSongsFromServer,
                ItemTemplate = new DataTemplate(() =>
                {
                    Label titleLabel = new Label();
                    titleLabel.SetBinding(Label.TextProperty, "SongTitle");
                    return new ViewCell
                    {
                        View = new StackLayout
                        {
                            Padding = new Thickness(0, 5),
                            Orientation = StackOrientation.Horizontal,
                            Children =
                            {
                                new StackLayout
                                {
                                    VerticalOptions=LayoutOptions.Center,
                                    Spacing=0,
                                    Children =
                                    {
                                         titleLabel
                                    }
                                }
                            }

                        }
                    };
                })

            };
            this.Content = new StackLayout
            {
                Children =
                {
                    listView
                }
            };
  

После сборки приложения я получил только список с первыми буквами, но без названий песен. Кто-нибудь может мне помочь, как этого добиться?

введите описание изображения здесь

Комментарии:

1. вы читали документы по сгруппированному ListView и смотрели на их примеры структурирования данных?

2. Да, это первое, что я сделал. Я прочитал документы и другие вопросы с этого форума, но теперь я не знаю, что мне следует изменить, чтобы получить результат, который я хочу.

3. ваши сгруппированные данные должны наследоваться от List<T>, как в документах. Вы также не показываете, как вы заполняете свои данные, поэтому там также могут возникнуть проблемы

4. Проблема заключалась в отсутствии наследования. Спасибо за помощь.

Ответ №1:

Вы хотите отобразить сгруппированный список песен, вы можете использовать CollectionView. Потому что это обеспечивает простой способ отображения групповых данных.

Отображение сгруппированных данных:

 <CollectionView ItemsSource="{Binding Animals}"
                IsGrouped="true">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <Grid Padding="10">
                ...
                
            </Grid>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView> 
  

И проблема данных режима может относиться к документу, который нужно SongSet наследовать Lsit<Song> для создания сгруппированных данных.

 public class SongSet :  List<Song>
{
    public string FirstCharacter { get; set; }
   
    public SongSet(string firstChar,List<Song> ListOfSongs): base(ListOfSongs)
    {
        this.FirstCharacter = firstChar;
    }
}