Reputation: 7890
I have this class AlphaKeyGroup
:
public class AlphaKeyGroup<T> : List<T>
{
/// <summary>
/// The delegate that is used to get the key information.
/// </summary>
/// <param name="item">An object of type T</param>
/// <returns>The key value to use for this object</returns>
public delegate string GetKeyDelegate(T item);
/// <summary>
/// The Key of this group.
/// </summary>
public string Key { get; private set; }
/// <summary>
/// Public constructor.
/// </summary>
/// <param name="key">The key for this group.</param>
public AlphaKeyGroup(string key)
{
Key = key;
}
/// <summary>
/// Create a list of AlphaGroup<T> with keys set by a SortedLocaleGrouping.
/// </summary>
/// <param name="slg">The </param>
/// <returns>Theitems source for a LongListSelector</returns>
private static List<AlphaKeyGroup<T>> CreateGroups(SortedLocaleGrouping slg)
{
List<AlphaKeyGroup<T>> list = new List<AlphaKeyGroup<T>>();
foreach (string key in slg.GroupDisplayNames)
{
list.Add(new AlphaKeyGroup<T>(key));
}
return list;
}
/// <summary>
/// Create a list of AlphaGroup<T> with keys set by a SortedLocaleGrouping.
/// </summary>
/// <param name="items">The items to place in the groups.</param>
/// <param name="ci">The CultureInfo to group and sort by.</param>
/// <param name="getKey">A delegate to get the key from an item.</param>
/// <param name="sort">Will sort the data if true.</param>
/// <returns>An items source for a LongListSelector</returns>
public static List<AlphaKeyGroup<T>> CreateGroups(IEnumerable<T> items, CultureInfo ci, GetKeyDelegate getKey, bool sort)
{
SortedLocaleGrouping slg = new SortedLocaleGrouping(ci);
List<AlphaKeyGroup<T>> list = CreateGroups(slg);
foreach (T item in items)
{
int index = 0;
if (slg.SupportsPhonetics)
{
//check if your database has yomi string for item
//if it does not, then do you want to generate Yomi or ask the user for this item.
//index = slg.GetGroupIndex(getKey(Yomiof(item)));
}
else
{
index = slg.GetGroupIndex(getKey(item));
}
if (index >= 0 && index < list.Count)
{
list[index].Add(item);
}
}
if (sort)
{
foreach (AlphaKeyGroup<T> group in list)
{
group.Sort((c0, c1) => { return ci.CompareInfo.Compare(getKey(c0), getKey(c1)); });
}
}
return list;
}
}
And this is how i create my LongListSelector
ItemsSource:
foreach (string item in playlistRep.playlistDic.Keys)
{
playlistCollection.Add(new PlaylistItem(item, playlistRep.playlistDic[item].Count));
}
List<AlphaKeyGroup<PlaylistItem>> DataSource = AlphaKeyGroup<PlaylistItem>.CreateGroups(playlistCollection,
System.Threading.Thread.CurrentThread.CurrentUICulture,
(PlaylistItem s) => { return s.Name; }, true);
playlistList.ItemsSource = DataSource;
And i get a LongListSelector with a keys like this:
"A"
a...
a...
a....
"B"
"C"
c.....
c..
c..
........
And i want to know what should i do to get the group name with something like this:
"Playlist"
bla bla bla
"Vimeo Playlist"
bla
bla
bla
I want to be able create a header with string and not chars
Upvotes: 3
Views: 2577
Reputation: 2698
Define a class like this
public class PlaylistItem
{
public string ItemName { get; set; }
public string PlayListGroup { get; set; }
}
public MainPage()
{
InitializeComponent();
List<PlaylistItem> PlayList = new List<PlaylistItem>();
//Add your playlistitems in PlayList
PlayList.Add(new PlaylistItem() { ItemName = "abc", PlayListGroup = "Vimeo Playlist" });
PlayList.Add(new PlaylistItem() { ItemName = "ab", PlayListGroup = "Playlist" });
var groupedPlayList =
from list in PlayList
group list by list.PlayListGroup into listByGroup
select new KeyedList<string, PlaylistItem>(listByGroup);
LongListSelectorList.ItemsSource = new List<KeyedList<string, PlaylistItem>>(groupedPlayList);
}
Now define KeyedList as
public class KeyedList<TKey, TItem> : List<TItem>
{
public TKey Key { protected set; get; }
public KeyedList(TKey key, IEnumerable<TItem> items)
: base(items)
{
Key = key;
}
public KeyedList(IGrouping<TKey, TItem> grouping)
: base(grouping)
{
Key = grouping.Key;
}
}
Remember: In groupHeader Template bind the TextBlock
text as
<TextBlock Text="{Binding Key}" />
Upvotes: 9