Чтобы использовать LongListSelector с числами, давайте попробуем сгруппировать список людей по возрасту, а не по первой букве их имени (в примере MSDN PeopleHub)
Они используют загадочную группу AlphaKeyGroup, которая представляет собой список людей, имена которых начинаются с одной и той же буквы (эта буква становится ключом группы AlphaKeyGroup). AlphaKeyGroups людей может выглядеть так:
- Key = A: Amber, Amelia (где оба объекта People имеют имена, начинающиеся с A)
- Key = B: Bob, Brian (где оба объекта People имеют имена, начинающиеся с B)
- Клавиша = C: и т.д. и т.п.
Мы будем использовать IntegerKeyGroup, который представляет собой список людей одного возраста. IntegerKeyGroups людей может выглядеть так:
- Ключ = 23: Дженнифер, Райан (где обоим объектам People по 23 года)
- Ключ = 26: Эмбер, Меган (где обоим объектам «Люди» по 26 лет)
- Ключ = 34: и т. д. и т. д.
Таким образом, чтобы следовать структуре GentryRiggen, мы должны сначала определить IntegerKeyGroup, а затем распределить людей по возрастным группам, к которым они принадлежат. Я поместил их в файл ViewModel.
public class IntegerKeyGroup<T> : List<T>
{
public int Key { get; private set; }
public IntegerKeyGroup(int key)
{
Key = key;
}
}
Обратите внимание, что IntegerKeyGroup — это просто список, но со специальным целочисленным членом, который называется Key. Это означает, что мы можем пометить список людей с целочисленным возрастом как ключ.
Теперь нам нужно рассортировать наш большой список несортированных людей по группам IntegerKeyGroups разного возраста и, наконец, объединить все эти группы IntegerKeyGroups вместе. Этот комбинированный список IntegerKeyGroups — это то, что LongListSelector принимает для отображения.
public static List<IntegerKeyGroup<Person>> CreateGroups(IEnumerable<Person> UnsortedPeopleList)
{
// Create combined list of IntegerKeyGroups
List<IntegerKeyGroup<Person>> CombinedPeopleList = new List<IntegerKeyGroup<Person>>();
// Create a IntegerKeyGroup for each age group I want,
// The constructor parameters sets the Key to the IntegerKeyGroup
IntegerKeyGroup<Person> Age23s = new IntegerKeyGroup<Person>(23);
IntegerKeyGroup<Person> Age26s = new IntegerKeyGroup<Person>(26);
IntegerKeyGroup<Person> Age34s = new IntegerKeyGroup<Person>(34);
// Populate each IntegerKeyGroup with the appropriate Persons
foreach (Person p in UnsortedPeopleList)
{
switch (p.Age)
{
case 23: Age23s.Add(p); continue;
case 26: Age26s.Add(p); continue;
case 34: Age34s.Add(p); continue;
default: continue; // we don't support ages other than the 3 above
}
}
// Add each IntegerKeyGroup to the overall list
CombinedPeopleList.Add(Age23s);
CombinedPeopleList.Add(Age26s);
CombinedPeopleList.Add(Age34s);
return CombinedPeopleList;
}
Оставаясь в файле ViewModel, сделайте список IntegerKeyGroups общедоступным с помощью функции CreateGroups.
public List<IntegerKeyGroup<Person>> AgeGroupedPeople
{
get
{
return CreateGroups(UnsortedPeople);
}
}
Теперь в XAML внесите 1 изменение в исходный код из MSDN. Пример PeopleHub:
<phone:LongListSelector Name="peopleLongListSelector"
ItemsSource="{Binding AgeGroupedPeople}" <!-- Change is in this line! -->
JumpListStyle="{StaticResource LongListSelectorJumpListStyle}"
ListHeaderTemplate="{StaticResource LongListSelectorHeaderTemplate}"
GroupHeaderTemplate="{StaticResource LongListSelectorGroupHeaderTemmplate}"
ItemTemplate="{StaticResource LongListSelectorItemTemplate}"
HideEmptyGroups ="true" IsGroupingEnabled ="true" LayoutMode="List">
</phone:LongListSelector>
Это должно группировать людей по целым числам, в данном случае по возрасту.
person
Vivian Liu - MSFT
schedule
26.06.2014