web-dev-qa-db-ja.com

C#を使用してWPFでDataGrid列ヘッダーを並べ替え可能にする

Visual Studio 2008でC#を使用していて、WPFツールキットをインストールしています。 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>
28
Chuck McMullen

DataGridTemplateColumnでは、SortMemberPathを ""に設定しています。これをアイテムの実際のプロパティ(たとえば、CompleteDate)に設定すると、ソートできるはずです。選択した列にCanUserSort="true"またはCanUserSort="false"を設定することもできます。

SortMemberPathは、ユーザーがソートを試みたときにソートするプロパティを提供します。これが設定されていない場合、グリッドはその列をソートする方法を認識しません(それはnot列のテキストを使用します)

            <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>
58
Philip Rieck