Pokazywanie postów oznaczonych etykietą PagedCollectionView. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą PagedCollectionView. Pokaż wszystkie posty

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"

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