Группировка LongListSelector, JumpList

У меня есть LongListSelector, который работает как надо, я хочу только сейчас включить группировку. Как и в PeopleHub и JumpList. Как я могу это сделать ? Я проверил пример на MSDN, но он сложный и у меня не сработал, может быть, я его неправильно понимаю.

Я не заполняю LongListSelector кодом xaml или C#, а синтаксическим анализом xml.

Сначала я разбираю xml:

XDocument xml = XDocument.Load("xmlfile.xml");

        var data = from query in xml.Descendants("country")
                   select new Country
                   {
                       Name = (string)query.Element("name"),};

и установите itemsSource:

countriesList.ItemsSource = data.ToList();

        // Set the data context of the listbox control to the sample data
        DataContext = App.ViewModel;
    }

У меня есть класс страны:

public class Country
{
    string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }}

Теперь я хотел бы сгруппировать эти страны по названию. Как я могу это сделать ?

Спасибо за вашу помощь.


person Skynet    schedule 17.12.2013    source источник


Ответы (2)


В примере они создают вспомогательный класс модных штанов под названием AlphaKeyGroup<T>. На самом деле вам просто нужен класс, содержащий каждую группу:

public class CountryGrouping : List<Country>
{
    public CountryGrouping(IEnumerable<Country> items) : base(items) { }

    public string Key { get; set; }
}

Привяжите ItemsSource к этому:

countriesList.ItemsSource = data
    .GroupBy(country => country.Name)
    .Select(grp => new CountryGrouping(grp.ToArray()) { Key = grp.Key })
    .ToList();

Я предполагаю, что LongListSelector ищет свойство под названием «Ключ» в качестве заголовка группы (магические строки!).

Кроме того, не забудьте установить IsGroupingEnabled="true" на элементе управления.

person McGarnagle    schedule 17.12.2013
comment
Могу ли я разместить этот класс на главной странице? Для чего используется ключ, если он группирует страны по имени? - person Skynet; 17.12.2013
comment
Однако во второй части я получаю сообщение об ошибке: «app.MainPage.CountryGrouping» не содержит конструктора, который принимает 1 аргумент. - person Skynet; 17.12.2013
comment
@Skynet моя ошибка, мне нужно было добавить конструктор в CountryGrouping. Key нужен LongListSelector (я думаю). - person McGarnagle; 17.12.2013

Взгляните на эту вики о LongListSelector на сайте разработчиков Nokia: http://developer.nokia.com/Community/Wiki/LongListSelector_with_bindable_SelectedItem_and_better_scrolling

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

person Depechie    schedule 18.12.2013
comment
Все что нужно я уже запрограммировал, выбрал Item тоже, все равно посмотрю. - person Skynet; 18.12.2013
comment
Хорошо, трудно сказать прямо, почему вы не видите группы :( - person Depechie; 19.12.2013