2012-01-20 77 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