CollectionViewSource類可以根據指定條件為資料來源產生視圖,可以指定排序,篩選,甚至分組.可以把它產生的視圖和資料來源之間的關係理解成關係型資料庫的視圖和表之間的關係.
1.在View中添加一個ListBox和三個按鈕. (記得取消DataTemplate的注釋啊.....)
2.後台代碼如下
public class Item { public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } } public partial class MainPage : PhoneApplicationPage { // 建構函式 public MainPage() { InitializeComponent(); ObservableCollection<Item> arr = new ObservableCollection<Item>(); Item item = new Item(); item.Name ="李雷"; item.Sex ="男"; item.Age = 20; arr.Add(item); item = new Item(); item.Name = "李淼"; item.Sex = "女"; item.Age = 10; arr.Add(item); item = new Item(); item.Name = "李明"; item.Sex = "男"; item.Age = 20; arr.Add(item); item = new Item(); item.Name = "李明明"; item.Sex = "男"; item.Age = 10; arr.Add(item); item = new Item(); item.Name = "李扶持"; item.Sex = "男"; item.Age = 11; arr.Add(item); item = new Item(); item.Name = "李來"; item.Sex = "男"; item.Age = 11; arr.Add(item); _source = new CollectionViewSource(); //初始化CollectionViewSource的資料來源 _source.Source = arr; //綁定ListBox的資料來源//注意listbox綁定CollectionViewSource的View屬性 lb.ItemsSource = Source; } private CollectionViewSource _source; public ICollectionView Source { get { return _source.View; } } private void OnButtonAgeAscendingClick(object sender, RoutedEventArgs e) { //首選我們按年齡升序排序.需要指定一下排序使用的屬性名稱,要根據年齡排序當然使用的是Age屬性. //然後指定排序方式,ListSortDirection.Ascending,升序排序. //清空篩選條件,顯示所有資料 _source.Filter += (o, arg) => { arg.Accepted = true; }; _source.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending)); } private void OnButtonShowGirlClick(object sender, RoutedEventArgs e) { //指定只顯示女生 //Accepted 這個值指示項是否通過篩選條件 _source.Filter += (o, arg) => { arg.Accepted = ((Item)arg.Item).Sex == "女"; }; } private void OnButtonGroupClick(object sender, RoutedEventArgs e) { //清空篩選條件. _source.Filter += (o, arg) => { arg.Accepted = true; }; //按年齡進行分組 _source.GroupDescriptions.Add(new PropertyGroupDescription("Age")); } }
下一篇文章將講解:CollectionViewSoure在LongListSelector上的使用.