使用C#在WPF中对DataGrid列标题进行排序

28 wpf datagrid header jquery-ui-sortable

我在Visual Studio 2008中使用C#,我已经安装了WPF Toolkit.我在testtest.xaml中创建了一个DataGrid.ID和Parts $列可以通过单击其相应的列标题对DataGrid进行排序.但是,列标题完成日期没有该功能.我使用标记"DataGridTemplateColumn"来格式化此列的日期.如何编写列标题完成日期,以便您可以单击"完成日期"列标题并对该列进行排序.如果单击该列,则不仅不会显示箭头,而且列标题不是"可单击的".谢谢

    <Label Height="22" HorizontalAlignment="Left" Margin="10,45,0,0" Name="label1" VerticalAlignment="Top" Width="41">Task</Label>
    <my:DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="140,83,67,28" Name="dataGrid1" GridLinesVisibility="Vertical" IsReadOnly="True">
        <my:DataGrid.Columns>
            <my:DataGridTextColumn    Binding="{Binding Path=[ID]}" Header="ID" />
            <my:DataGridTextColumn Binding="{Binding Path=p}" Header="Parts $" />
            <my:DataGridTemplateColumn  SortMemberPath="" Header="Complete Date">
                <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="{}{0:MM/dd/yyyy}"/>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

Phi*_*eck 58

在你的DataGridTemplateColumnSortMemberPath设置为"".如果将其设置为项目上的实际属性(例如,CompleteDate),则应该能够进行排序.您还可以设置CanUserSort="true"CanUserSort="false"选择列.

SortMemberPath使属性可以在用户尝试排序时进行排序.如果没有设置,则网格不知道如何对该列进行排序(它并没有使用列文)

            <my:DataGridTemplateColumn  SortMemberPath="CompleteDate" Header="Complete Date" CanUserSort="true">
            <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="{}{0:MM/dd/yyyy}"/>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)