2012-01-20 79 views
2

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

回答

7

你可以挂钩一个事件:

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() 
    { ... } 

    ... 
} 
+0

感谢您的回答。第一列现在指示数据按该列进行排序,因为排序方向指示器显示在该列上,但直到实际点击列时数据仍然未排序。 – ihatemash

+0

你是对的,我忘了将SortDescription添加到集合中,我更新了代码,它现在应该可以工作。 – doblak

+0

如果该列不是自动生成的列,那么在为目标DataGrid设置DataContext后,您仍然可以使用dataGrid_AutoGeneratedColumns中的代码。 – laishiekai