poniedziałek, 28 listopada 2011

ListViewCollection oraz PagedCollectionView

1. ListViewCollection (WPF)
ListViewCollection jest to kolekcja wprowadzona do WPF-a, która wspiera sortowanie, grupowanie oraz filtrowanie. Kolekcję taką tworzymy w następujący sposób

List<Player> palyerList = new Player { new Player(),new Player()};
public ListViewCollection<Player> PlayerListCollectionView {get;set;}
ListViewCollection<Player> PlayerListCollectionView= new ListViewCollection<Player>(playerList);

czyli po prostu w konstruktorze przesyłamy obiekt implementujący interfejs IEnumerable
Filtrowanie
W celu przefiltrowania kolekcji wystarczy podać odpowiedni obiekt typu Predicate<object>(czyli tak naprawdę wystarczy napisać funkcję zwracającą bool oraz przyjmującą w parametrze obiekt). Załóżmy, że chcemy pokazać na widoku jedynie tych graczy, który nazywają się "Tomek". W tym celu wystarczy, że zrobimy coś takiego:

PlayerListCollectionView.Filter = val => { return (val as Player).Name.ToLower() == “tomek”; }

po zaaplikowaniu predicata widok zbindowany do danej listy automatycznie się odświeży. W razie czego można zawsze wymusić oświeżenie przez wywołanie funkcji

PlayerListCollectionView.Refresh();

Grupowanie
Kolekcja ListViewCollection wspiera również grupowanie. W celu pogrupowania listy po jakimś elemencie wystarczy do naszej listy dorzucić tzw. group description. Odbywa się to w taki sposób:

PlayerListCollectionView.GroupDescriptions.Add(
new PropertyGroupDescription { PropertyName = "Name" }

Po dodaniu PropertyGroupDescription widok automatycznie pogrupuje nam elementy po danych właściwościach.
Sortowanie
Nasza kolekcja wspiera również sortowanie. W celu posortowania wystarczy stworzyć obiekt implementujący interfjes IComparer, a następnie przypisać go do właściwości CustomSort

public class PlayerComparer : IComparer
{
public int Compare(object x, object y)
{
if (((Player)x).Age > (((Player)y).Age))
{
return 1;
}
return -1;
}
}
PlayerListCollectionView.CustomSort = new PlayerComparer ()

po takiej akcji widok automatycznie się odświeży i pokaże posortowane dane.
2. PagedCollectionView (Silverlight)
PagedCollectionView jest to uboższa wersja ListCollectionView z WPF-a. Grupowanie oraz filtrowanie dobywa się w ten sam sposób, jednakże sortowanie zostało w znaczny sposób utrudnione. Sortować możemy jedynie po właściwościach, nie możemy stworzyć własnego comparera, który zostałby użyty do wykonania operacji sortowania. Wykonanie operacji może wyglądać w następujący sposób:

PlayerPagedCollection.SortDescriptions.Clear();
PlayerPagedCollection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Name", ListSortDirection.Ascending));

W tym wypadku nasza kolekcja zostanie posortowana po właściwości "Name"

0 komentarze:

Prześlij komentarz

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Online Project management