传递数据网格.ItemsSource作为泛型函数中的泛型列表

本文关键字:泛型 函数 列表 数据 数据网 网格 ItemsSource | 更新日期: 2023-09-27 18:29:51

我正在尝试在数据网格上实现分页,它可以包含不同类型的列表,例如Teacher, Student等我如何调用按钮点击事件,以便我的Paginate函数可以过滤该列表并设置我的数据网格的项目源

    public List<T> Paginate<T>(List<T> list, int itemsPerPage, int currentPage)
    {
        // some code
    }

    private void Button1_Click(object sender, RoutedEventArgs e)
    {            
        this.Paginate(myDataGrid.ItemsSource,3,1);
    }

传递数据网格.ItemsSource作为泛型函数中的泛型列表

试试这个,对于这个解决方案,你需要至少提供绑定的数据列表的信息

private void Button1_Click(object sender, RoutedEventArgs e)
{
   if(boundlist=="Employee")
   {
    List<Employee> copy = new List<Employee>
    ((myDataGrid.ItemsSource as IList).OfType<Employee>());
    this.Paginate<Employee>(copy,3,1);
   }
   else if(boundlist=="Student")
   {
    List<Student> copy = new List<Employee>
    ((myDataGrid.ItemsSource as IList).OfType<Student>());
    this.Paginate<Student>(copy,3,1);
   }
}

如果你对元素没有限制,只通过索引访问,并且不使用对象属性的额外过滤,那么你可以在代码中使用非泛型类型:

public IList Paginate(IList list, int itemsPerPage, int currentPage)
{
    // some code
}
private void Button1_Click(object sender, RoutedEventArgs e)
{            
    this.Paginate(myDataGrid.ItemsSource as IList, 3, 1);
}

但是,只有在确保ItemsSource包含实现IList的对象(例如List<T>)的情况下,才应该执行此操作。如果您不确定,则需要使用IEnumerable接口并为每个页面迭代集合。

如果分页只是用于分页,那么只需将其作为对象列表传递即可。

private void Button1_Click(object sender, RoutedEventArgs e)
{            
    this.Paginate(myDataGrid.ItemsSource as IList<object>, 3, 1);
}