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     }