Список групп для Windows Phone 7? - PullRequest
       24

Список групп для Windows Phone 7?

3 голосов
/ 02 октября 2011

Я ищу способ группировки элементов, аналогичный тому, который есть в приведенных ниже приложениях для группирования.Можно ли создать список групп, используя View Models?Я планирую иметь несколько групп клиентов, например:

"AAA" (группа) - "XDN" (контакт)

"NCB" (группа) - "XDN" (контакт)

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

Спасибо.

enter image description here enter image description here

1 Ответ

5 голосов
/ 02 октября 2011

Ничто не мешает вам создать заказную коллекцию, которая подходит именно для этой цели.Вот тип коллекции, который я обычно использую для него, при интеграции его с LongListSelector в Silverlight Toolkit

Вам, очевидно, придется изменить GroupHeaderTemplate, но это очень просто.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;

namespace LongListSample
{
    public class LongListCollection<T, TKey> : ObservableCollection<LongListItem<T, TKey>>
        where T : IComparable<T>
    {
        public LongListCollection()
        {
        }

        public LongListCollection(IEnumerable<T> items, Func<T, TKey> keySelector)            
        {
            if (items == null)
                throw new ArgumentException("items");

            var groups = new Dictionary<TKey, LongListItem<T, TKey>>();

            foreach (var item in items.OrderBy(x => x))
            {
                var key = keySelector(item);

                if (groups.ContainsKey(key) == false)
                    groups.Add(key, new LongListItem<T, TKey>(key));

                groups[key].Add(item);
            }

            foreach (var value in groups.Values)
                this.Add(value);
        }
    }

    public class LongListItem<T, TKey> : ObservableCollection<T>
    {
        public LongListItem()
        {
        }

        public LongListItem(TKey key)
        {
            this.Key = key;
        }

        public TKey Key
        {
            get;
            set;
        }

        public bool HasItems
        {
            get
            {
                return Count > 0;
            }
        }
    }
}

Пример использования:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...