<!---------xaml------->
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<DataGrid x:Name="lstPeople" Width="200">
<DataGrid.Columns>
<DataGridTextColumn Header="className" Width="50" Binding="{Binding className}"/>
<DataGridTextColumn Header="Name" Width="80" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Width="50" Binding="{Binding Age}"/>
<DataGridTextColumn Header="Sex" Width="80" Binding="{Binding Sex}" />
<DataGridTextColumn Header="Email" Width="100" Binding="{Binding Email}"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel Orientation="Horizontal" Grid.Row="1">
<Button x:Name="btnSortbylast" Content="Sort By LastName" Click="btnSortbylast_Click" />
<Button x:Name="btnSortbydob" Content="Sort By DOB" Click="btnSortbydob_Click" />
<TextBox Text="1" Width="30" x:Name="filterClass"/>
<Button x:Name="btnFilter" Content="筛选班级" Click="btnFilter_Click" />
</StackPanel>
</Grid>
// ----------cs------------
public MainWindow()
{
InitializeComponent();
InitData();
}
private void InitData()
{
for (int i = 0; i < 30; i++)
{
people.Add(new Person() { Name = "学生" + i, Email = "123333@.abc.com", Sex = "男", Age = "10", className = i.ToString("00").Substring(0, 1) });
}
lstPeople.ItemsSource = people;
}
private Collection<Person> people = new Collection<Person>();
private bool isfiltered = false;
private void btnSortbylast_Click(object sender, RoutedEventArgs e)
{
//CollectionView, 表示用于分组、排序、筛选和导航数据集合的视图。
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lstPeople.ItemsSource);
cv.SortDescriptions.Clear();
cv.SortDescriptions.Add(new SortDescription("LastName", ListSortDirection.Ascending));
}
private void btnSortbydob_Click(object sender, RoutedEventArgs e)
{
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lstPeople.ItemsSource);
cv.SortDescriptions.Clear();
cv.SortDescriptions.Add(new SortDescription("Dateofbirth", ListSortDirection.Descending));
}
string className = "";
private void btnFilter_Click(object sender, RoutedEventArgs e)
{
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lstPeople.ItemsSource);
if (isfiltered)
{
cv.Filter = null;
isfiltered = false;
}
else
{
className = filterClass.Text;
cv.Filter = new Predicate<object>(FilterBySmith);
isfiltered = true;
}
}
private bool FilterBySmith(object item)
{
Person p = item as Person;
return p.className.Trim() == className;
}
// ------------Person-----------
public class Person
{
public string Name { get; set; }
public string Age { get; set; }
public string Sex { get; set; }
public string Email { get; set; }
public string className { get; set; }
}