我有一个包含多列的网格,用户可以根据任何列进行排序。绑定网格的数据是自定义实体的集合。我在屏幕上有一个打印按钮,单击此按钮我需要进行自定义打印。打印必须以与网格中显示的顺序相同的顺序显示数据(带有附加数据)
有没有办法直接获取已排序的数据源而不是在排序事件中对数据源进行排序?
由于 的Pankaj
答案 0 :(得分:7)
您必须使用yourDataGrid.Items,Items反映网格的当前视图。 并且您必须使用Cast方法和使用后转换.ToList();
想象一下
List<MyClass> myListOfMyClass = new List<MyClass>();
myGrid.ItemSource = myListOfMyClass;
List<MyClass> myListOfMyClassSortedByTheUser = myGrid.Items.Cast<MyClass>().ToList();
答案 1 :(得分:5)
是的,有。在WPF中,始终绑定CollectionView
,而不是集合本身。如果您自己未指定集合视图,则使用默认集合视图。您可以像这样访问此默认集合视图:
CollectionViewSource.GetDefaultView(yourCollectionOfCustomEntities);
这是网格所示的集合视图,其中应用了所有排序和过滤。
答案 2 :(得分:2)
您也可以枚举DataGrid的Items属性。与ItemsSource属性不同,Items属性似乎准确反映屏幕上的内容,包括排序和过滤。例如:
foreach (var item in dataGrid.Items)
{
// do something
}