Windows Phone 7的组列表框?

时间:2011-10-02 02:10:43

标签: windows-phone-7.1 windows-phone-7

我正在寻找一种方法来对项目进行分组,类似于下面的应用程序为其进行分组的方式。是否可以使用View Models创建组列表框?我计划拥有多个客户群,例如:

“AAA”(组) - “XDN”(联系方式)

“NCB”(集团) - “XDN”(联系方式)

等...我不希望它被字母分隔,而是通过组名来分隔。这可能吗?

感谢。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:5)

没有什么能阻止您创建适合该精确目的的自定义有序集合。这是我通常用于它的集合类型,当它与Silverlight Toolkit

中的LongListSelector集成时

你显然必须修改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