Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 初始数据网格排序_Wpf_User Controls_Wpfdatagrid - Fatal编程技术网

Wpf 初始数据网格排序

Wpf 初始数据网格排序,wpf,user-controls,wpfdatagrid,Wpf,User Controls,Wpfdatagrid,我有一个用户控件,它包含一个WPF工具包DataGrid。此控件在我的应用程序中的许多不同位置使用。网格不知道将显示的数据类型。是否有一种方法可以按照升序按第一列对网格进行初始排序,而不管网格中填充了什么数据?我认为我不能使用CollectionViewSource,因为我不知道绑定到第一列的属性的PropertyName 您可以连接到一个事件: dataGrid.AutoGeneratedColumns += dataGrid_AutoGeneratedColumns; 并对第一列进行排序:

我有一个用户控件,它包含一个WPF工具包
DataGrid
。此控件在我的应用程序中的许多不同位置使用。网格不知道将显示的数据类型。是否有一种方法可以按照升序按第一列对网格进行初始排序,而不管网格中填充了什么数据?我认为我不能使用
CollectionViewSource
,因为我不知道绑定到第一列的属性的
PropertyName

您可以连接到一个事件:

dataGrid.AutoGeneratedColumns += dataGrid_AutoGeneratedColumns;
并对第一列进行排序:

void dataGrid_AutoGeneratedColumns(object sender, EventArgs e)
{
    var firstCol = dataGrid.Columns.First();
    firstCol.SortDirection = ListSortDirection.Ascending;
    dataGrid.Items.SortDescriptions.Add(new SortDescription(firstCol.SortMemberPath, ListSortDirection.Ascending));
}
我建议您创建一个派生的独立的
DataGrid
控件,将此逻辑放在那里,并使用新控件来避免每次重复代码

public class CustomDataGrid : DataGrid
{
    public DynamicDataGrid()
    { ... }

    ...
}

谢谢你的回答。第一列现在表示数据是按该列排序的,因为排序方向指示器显示在该列上,但在我实际单击该列之前,数据仍然没有排序。你是对的,我忘了将SortDescription添加到集合中,我更新了代码,现在应该可以工作了。如果该列不是自动生成的,在为目标dataGrid设置DataContext之后,仍然可以使用dataGrid_AutoGeneratedColumns中的代码。