#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;
}
}