WPF datagrid筛选行显影

<!---------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; }
}

  

原文地址:https://www.cnblogs.com/zbfamily/p/12838053.html