2010-04-29 8 views
74

Ich habe ein WPF Toolkit DataGrid mit einer DataGridTemplateColumn. Ich habe in einem Raster-Attribut angegeben, dass alle Spalten sortierbar sein sollen, aber die DataGridTemplateColumn wird es nicht zulassen. Alle anderen Spalten erlauben das Sortieren. Ich habe sogar versucht, CanUserSort für diese Spalte explizit auf true zu setzen, aber kein Glück. Ist es sogar möglich, eine Template-Spalte zu sortieren? Ich habe einen benutzerdefinierten Sortierer bereitgestellt, der für alle Spalten funktioniert, aber der Header lässt keinen Sortierklick zu.Wie kann ich eine DataGridTemplateColumn in einem WPF Toolkit DataGrid sortieren?

<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> 

Antwort

134

Sie benötigen die SortMemberPath Eigenschaft auf Controls:DataGridTemplateColumn auf den Namen des CLR-Eigenschaft Sie sortieren möchten einzustellen.

+2

funktioniert perfekt. Vielen Dank! – Kilhoffer

+6

Ein Wort der Warnung. Dies wird nicht automatisch neu sortiert, wenn Sie die zugrunde liegenden Daten ändern. – Kelly

+1

Noch ein Hinweis: Das hört sich albern an, aber wenn Ihre Spalte keinen Header (den Titel) hat, wird sie auch nicht funktionieren. Wenn Sie auf die Kopfzeile klicken, wird die Sortierung ausgelöst. Ich habe eine Spalte, die keinen Header benötigt, und ich sortierte dies durch Setzen von Header = "" – Bokoskokos

24

SortMemberPath="Name" zu DataGridTemplateColumn hinzugefügt. Es begann zu sortieren.

<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> 
Verwandte Themen