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上的使用.