ฉันจะจัดเรียง DataGridTemplateColumn บน WPF Toolkit DataGrid ได้อย่างไร


93

ฉันมี WPF Toolkit DataGrid ที่มี DataGridTemplateColumn หนึ่งอัน ฉันได้ระบุในแอตทริบิวต์กริดที่ฉันต้องการให้คอลัมน์ทั้งหมดสามารถจัดเรียงได้ แต่ DataGridTemplateColumn ไม่อนุญาต คอลัมน์อื่น ๆ ทั้งหมดอนุญาตให้จัดเรียงได้ ฉันได้ลองตั้งค่า CanUserSort อย่างชัดเจนให้เป็นจริงสำหรับคอลัมน์นั้น แต่ไม่มีโชค สามารถจัดเรียงคอลัมน์เทมเพลตได้หรือไม่? ฉันได้จัดเตรียมตัวเรียงลำดับแบบกำหนดเองที่ใช้ได้กับทุกคอลัมน์ แต่ส่วนหัวไม่อนุญาตให้คลิกเรียงลำดับ

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

คำตอบ:


172

คุณต้องตั้งค่าSortMemberPathคุณสมบัติControls:DataGridTemplateColumnเป็นชื่อของคุณสมบัติ CLR ที่คุณต้องการเรียงลำดับ


2
ทำงานได้อย่างสมบูรณ์ ขอบคุณ!
Kilhoffer

6
คำเตือนคำเดียว การดำเนินการนี้จะไม่จัดเรียงใหม่โดยอัตโนมัติหากคุณเปลี่ยนข้อมูลพื้นฐาน
Kelly

1
หมายเหตุอื่น: อาจฟังดูงี่เง่า แต่ถ้าคอลัมน์ของคุณไม่มี Header (ชื่อเรื่อง) ก็จะไม่ทำงานเช่นกันการคลิกที่ส่วนหัวจะทำให้เกิดการเรียงลำดับ ฉันมีคอลัมน์ที่ไม่ต้องการส่วนหัวและฉันจัดเรียงข้อมูลนี้โดยตั้งค่า Header = ""
Bokoskokos

ทำงานตามที่คาดไว้
Harmi


15
 <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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.