在WPF中使用C#使DataGrid列标题具有排序功能

30
我在Visual Studio 2008中使用C#,并安装了WPF Toolkit。我在testtest.xaml中创建了一个DataGrid。ID和Parts $列可以通过单击它们各自的列标题来对DataGrid进行排序。但是,Complete Date列标题没有这个功能。我使用“DataGridTemplateColumn”标签为该列格式化日期。如何编程Complete Date列标题,以便您可以单击Complete Date列标题并对该列进行排序。如果单击该列,则箭头不仅不显示,而且列标题也无法“点击”。 谢谢
    <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>

1个回答

65

在你的 DataGridTemplateColumn 中,你将SortMemberPath设置为空字符串。如果你将其设置为项上实际存在的属性(比如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>

如果该列绑定到属性,是否也有可能?如何实现? - miguelmpn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接