web-dev-qa-db-fra.com

Rendre un en-tête de colonne DataGrid triable dans WPF à l'aide de C #

J'utilise C # dans Visual Studio 2008 et j'ai installé le WPF Toolkit. J'ai créé un DataGrid dans testtest.xaml. Les colonnes ID et Parts $ ont la possibilité de trier le DataGrid en cliquant sur leurs en-têtes de colonne respectifs. Toutefois, l'en-tête de colonne Date de fin n'a pas cette capacité. J'ai utilisé la balise "DataGridTemplateColumn" pour formater les dates de cette colonne. Comment programmer l'en-tête de colonne Date de fin afin de pouvoir cliquer sur l'en-tête de colonne Date de fin et trier cette colonne. Si vous cliquez sur la colonne, non seulement la flèche n'est pas affichée, mais l'en-tête de colonne n'est pas "cliquable". Je vous remercie

    <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

Dans votre DataGridTemplateColumn, SortMemberPath est défini sur "". Si vous définissez cela sur une propriété réelle sur l'élément (par exemple, CompleteDate), vous devriez pouvoir trier. Vous pouvez également définir CanUserSort="true" ou CanUserSort="false" sur les colonnes sélectionnées.

SortMemberPath donne la propriété sur laquelle trier lorsque l'utilisateur tente un tri. Si ce n'est pas défini, la grille ne sait pas comment trier cette colonne (elle le fait pas utilise le texte dans la colonne)

            <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