2010-04-29 105 views
74

我有一個DataGridTemplateColumn的WPF Toolkit DataGrid。我在網格屬性中指定希望所有列都是可排序的,但DataGridTemplateColumn不允許它。所有其他列確實允許排序。我甚至嘗試明確設置CanUserSort爲真正的列,但沒有運氣。是否可以對模板列進行排序?我提供了適用於所有列的自定義排序器,但標題不允許排序點擊。如何對WPF Toolkit DataGrid上的DataGridTemplateColumn進行排序?

<Controls:DataGrid ItemsSource="{Binding Events}" AutoGenerateColumns="False" 
           CanUserSortColumns="True" 
           CanUserReorderColumns="False" 
           Sorting="DataGrid_Sorting" 
           x:Name="EventsGrid"> 
       <Controls:DataGrid.Columns> 
        <Controls:DataGridTemplateColumn Header="Type" Width="42" CanUserResize="False"> 
         <Controls:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <Image Source="{Binding EventTypeImage, Mode=OneWay}" HorizontalAlignment="Center" Width="16"/> 
          </DataTemplate> 
         </Controls:DataGridTemplateColumn.CellTemplate> 
        </Controls:DataGridTemplateColumn> 
        <Controls:DataGridTextColumn Header="Source" 
              Binding="{Binding Source, Mode=OneWay}" /> 
        <Controls:DataGridTextColumn Header="Details" MinWidth="175" 
              Binding="{Binding Details, Mode=OneWay}" /> 
        <Controls:DataGridTextColumn Header="Timestamp" MinWidth="175" 
              Binding="{Binding Timestamp, Mode=OneWay}" 
              IsReadOnly="True"/> 
       </Controls:DataGrid.Columns> 
      </Controls:DataGrid> 

回答

134

您需要在Controls:DataGridTemplateColumn設置SortMemberPath屬性要排序的CLR屬性的名稱。

+2

完美的作品。謝謝! – Kilhoffer 2010-04-29 17:36:42

+6

一個字的警告。如果您更改基礎數據,這不會自動重新排序。 – Kelly 2011-06-27 15:27:14

+1

另一個注意事項:這聽起來可能很愚蠢,但是如果你的專欄沒有標題(標題),它也將不起作用 - 點擊標題將觸發排序。我有一個不需要頭的列,我通過設置Header =「」 – Bokoskokos 2014-08-28 12:40:22

24

向DataGridTemplateColumn添加了SortMemberPath="Name"。它開始分類。

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True"> 
11
<DataGridTemplateColumn SortMemberPath="DataDiNascita" Header="Data di nascita" IsReadOnly="True"> 
       <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate> 
         <DatePicker SelectedDate="{Binding Path=DataDiNascita}"></DatePicker> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=DataDiNascita,StringFormat=\{0:dd/MM/yyyy\}}"></TextBlock> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
相關問題