2 <Window x:Class="MainWindow" 3 Loaded="Window_Loaded"> 4 5 <ListBox x:Name="lstPeople" Width="200"> 6 <ListBox.ItemTemplate> 7 <DataTemplate> 8 <StackPanel> 9 <StackPanel Orientation="Horizontal">10 <TextBlock Text="{Binding LastName}" />11 <TextBlock Text=", " />12 <TextBlock Text="{Binding FirstName}" />13 </StackPanel>14 <TextBlock Text="{Binding State}" />15 <TextBlock Text="{Binding Dateofbirth}" />16 </StackPanel> 17 </DataTemplate>18 </ListBox.ItemTemplate>19 </ListBox>20 21 <StackPanel Orientation="Horizontal" Grid.Row="1">22 <Button x:Name="btnSortbylast" Content="Sort By LastName" Click="btnSortbylast_Click" />23 <Button x:Name="btnSortbydob" Content="Sort By DOB" Click="btnSortbydob_Click" />24 <Button x:Name="btnFilter" Content="Show Smiths" Click="btnFilter_Click" />25 </StackPanel>
1 private Collection<Person> people = new Collection<Person>();
2 private bool isfiltered = false;
3
4 private void btnSortbylast_Click(object sender, RoutedEventArgs e)
5 {
6 //CollectionView, 表示用于分组、排序、筛选和导航数据集合的视图。
7 CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lstPeople.ItemsSource);
8 cv.SortDescriptions.Clear();
9 cv.SortDescriptions.Add(new SortDescription("LastName", ListSortDirection.Ascending));
10 }
11
12 private void btnSortbydob_Click(object sender, RoutedEventArgs e)
13 {
14 CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lstPeople.ItemsSource);
15 cv.SortDescriptions.Clear();
16 cv.SortDescriptions.Add(new SortDescription("Dateofbirth", ListSortDirection.Descending));
17 }
18
19 private void btnFilter_Click(object sender, RoutedEventArgs e)
20 {
21 CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lstPeople.ItemsSource);
22 if(isfiltered)
23 {
24 cv.Filter=null;
25 isfiltered=false;
26 }else{
27 cv.Filter = new Predicate<object>(FilterBySmith);
28 isfiltered=true;
29 }
30 }
31
32 private bool FilterBySmith(object item)
33 {
34 Person p = item as Person;
35 return p.LastName.Trim()=="Smith";
36 }
37
38 private void Window_Loaded(object sender, RoutedEventArgs e)
39 {
40 people.Add(new Person() {FirstName="Tom", LastName="Smith", State="NY", Dateofbirth=new DateTime(1962, 10, 30)});
41 people.Add(new Person() { FirstName = "John", LastName = "Doe", State = "CA", Dateofbirth = new DateTime(1970, 3, 20) });
42 people.Add(new Person() { FirstName = "Jane", LastName = "Doe", State = "AL", Dateofbirth = new DateTime(1970, 3, 20) });
43 people.Add(new Person() { FirstName = "Bill", LastName = "Johnson", State = "CA", Dateofbirth = new DateTime(1970, 3, 20) });
44 people.Add(new Person() { FirstName = "Stacey", LastName = "Zany", State = "GA", Dateofbirth = new DateTime(1970, 3, 20) });
45 people.Add(new Person() { FirstName = "Liz", LastName = "Smith", State = "TX", Dateofbirth = new DateTime(1970, 3, 20) });
46 people.Add(new Person() { FirstName = "Jim", LastName = "Jones", State = "TX", Dateofbirth = new DateTime(1970, 3, 20) });
47
48 lstPeople.ItemsSource=people;
49 }
50 }
51
52 public class Person
53 {
54 public string FirstName { get; set; }
55 public string LastName { get; set; }
56 public string State { get; set; }
57 public DateTime Dateofbirth { get; set; }
58 }