在XAML中排序DataGrid时,未反映ColumnHeader箭头

Mat*_*att 7 .net sorting wpfdatagrid

我有一个DataGrid,在XAML中定义了一些排序,如下所示:

<CollectionViewSource x:Key="DefaultSort" Source="{Binding SearchResults}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="ExternalOrgNo" Direction="Ascending"/>
        <scm:SortDescription PropertyName="ExternalBranchNumber" Direction="Ascending"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>
Run Code Online (Sandbox Code Playgroud)

排序正确应用于DataGrid,但没有指示网格上的排序.

查看后面代码中的视图,我看到了集合中的SortDescriptions,我尝试刷新视图,但它没有用.

如何让ColumnHeader箭头最初正确反映视图的SortDescription集合的状态?

更新:我找到了答案.我将SortDirection添加到DataGrid中的DataGridTextColumn.这添加了ColumnHeader箭头.

<DataGridTextColumn Header="Ext Firm #" Binding="{Binding ExternalOrgNo}" DisplayIndex="4" SortDirection="Ascending" Visibility="Visible" />
<DataGridTextColumn Header="Ext Branch #" Binding="{Binding ExternalBranchNumber}" DisplayIndex="5" SortDirection="Ascending" Visibility="Visible" />
Run Code Online (Sandbox Code Playgroud)

ren*_*ene 3

OP 看起来不像是常客,所以在那之前我将他的解决方案作为答案发布:

将 加入SortDirectionDataGridTextColumnDataGrid。这添加了ColumnHeader箭头。

<DataGridTextColumn Header="Ext Firm #" 
                    Binding="{Binding ExternalOrgNo}" 
                    DisplayIndex="4" 
                    SortDirection="Ascending" 
                    Visibility="Visible" />
<DataGridTextColumn Header="Ext Branch #" 
                    Binding="{Binding ExternalBranchNumber}" 
                    DisplayIndex="5" 
                    SortDirection="Ascending" 
                    Visibility="Visible" />
Run Code Online (Sandbox Code Playgroud)

  • 如果 CollectionViewSource 的 `SortDescriptions` 属性在代码中设置并在运行时发生变化,则此方法不起作用,因此设置常量 `SortDescription="Ascending"` 将是错误的,因为它不会反映当前的排序。 (2认同)