2015-04-16 97 views
3

我有一個UserControl,它基本上只包含一個DataGrid。 在這個DataGrid中,我有一個事件列表(嚴重性 - 日期 - 消息)。 用戶控件通過MVVMLight ToolkitViewModelLocator綁定。WPF DataGrid:指定默認排序

我添加了兩件事情:

在我的用戶資源:

<UserControl.Resources> 
    <CollectionViewSource x:Key="SortedEvents" Source="{Binding Events}"> 
     <CollectionViewSource.SortDescriptions> 
      <componentModel:SortDescription PropertyName="EventTime" Direction="Descending"/> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</UserControl.Resources> 

它使用的DataGrid中:

<DataGrid ItemsSource="{Binding Source={StaticResource SortedEvents}}" AutoGenerateColumns="False" > 

我也對DataGridTextColumn.SortDirectionSortedDirection集:

<DataGridTextColumn Binding="{Binding EventTime}" Header="Time" IsReadOnly="True" SortDirection="Descending"/> 

當我檢查設計器時,我看到顯示DataGrid排序正確的小箭頭。

但是,當我啓動應用程序,列表不排序,箭頭不在這裏。如果我點擊列進行排序,它會正確排序所有內容,它只是默認值,看起來不起作用。

我錯過了什麼? (這個dataGrid /列甚至沒有命名,所以我不能嘗試通過別的方法來編輯它們)。

(起初我只是有在DataGridTextColumnSortDirection同樣的結果)

回答

2

關於 「小箭頭」 點擊這裏: ColumnHeader arrows not reflected when sorting a DataGrid in XAML

而對於更復雜的答案:Pre-sorting a DataGrid in WPF

我認爲主要部分是:

注意:「scm」命名空間前綴映射到System.ComponentModel其中 SortDescription類存在。

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 

編輯

DataGrid中刪除SortDescriptions和GroupDescriptions每當它的ItemsSource的變化。這是必要的,因爲與其他ItemsControls不同,DataGrid本身在用戶單擊列標題時添加SortDescriptions,並且如果它們與新ItemsSource不兼容,則它們保持原樣可能會崩潰。

protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue) 
    { 
     if (SetupSortDescriptions != null && (newValue != null)) 
      SetupSortDescriptions(this, new ValueEventArgs<CollectionView>((CollectionView)newValue)); 

     base.OnItemsSourceChanged(oldValue, newValue); 
    } 
+0

請再次閱讀我的問題,你基本上建議我兩件事情,我已經完成和描述。 – J4N