首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已忽略DataGrid SortDirection

已忽略DataGrid SortDirection
EN

Stack Overflow用户
提问于 2011-12-19 09:37:25
回答 4查看 9K关注 0票数 13

我希望在启动时指定默认排序,但仍然允许用户通过单击列标题进行排序。遗憾的是,当SortDirection属性被设置时,它被忽略了--也就是说,我们得到了正确的列标题箭头,但是没有排序。

手动单击标题,会正确地对数据进行排序,因此这不是排序本身。这是我使用的简化版本:

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=CurrentView}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header 1" Binding="{Binding ApplicationName}"/>
        <DataGridTextColumn Header="Header 2" 
               Binding="{Binding TotalTime}" SortDirection="Descending"/>
    </DataGrid.Columns>
</DataGrid>

更新:我还尝试按照建议将SortDescriptions添加到ICollectionView中,但没有得到好的结果。这是否与我正在向集合中动态添加新项有关?也就是说,在启动时,列表是空的,填充缓慢,也许sortdescription只应用了一次?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-19 10:03:48

看一下这个MSDN Blog

从上面的链接:

DataGridColumn.SortDirection实际上并不对列进行排序。

DataGridColumn.SortDirection用于将DataGridColumnHeader中的可视箭头排列为向上、向下或不显示。要对列进行实际排序而不是单击DataGridColumnHeader,可以通过编程方式设置DataGrid.Items.SortDescriptions。

票数 14
EN

Stack Overflow用户

发布于 2011-12-19 10:03:01

我对此没有任何个人经验,但我找到了this rather helpful article

本质上,您需要将SortDescription添加到DataGrid绑定到的CollectionViewSource中。

票数 4
EN

Stack Overflow用户

发布于 2012-02-07 06:12:27

这篇文章非常有帮助。我能够使用它来找到一个比较简单的解决方案。以下是我的解决方案的一小段工作。

XAML

代码语言:javascript
复制
        <DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
            AutoGenerateColumns="False" ItemsSource="{Binding LogLister.Logs}"              
            IsReadOnly="True" >

            <DataGrid.Columns>                  

                <DataGridTextColumn Binding="{Binding TimeStampLocal}" Header="Time" x:Name="ColTimeStamp" />

                <DataGridTextColumn Binding="{Binding Text}" Header="Text"/>
            </DataGrid.Columns>
        </DataGrid>

代码

代码语言:javascript
复制
    // Using a DependencyProperty as the backing store for ViewModel.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ViewModelProperty =
        DependencyProperty.Register("ViewModel", typeof(LogViewerViewModel), typeof(LogViewerControl),
           new UIPropertyMetadata(null,pf_viewModelChanged));

    private static void pf_viewModelChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        var control = (LogViewerControl)o;

        control.ColTimeStamp.SortDirection = ListSortDirection.Descending;

        var vm = e.NewValue as LogViewerViewModel;

        if (vm != null)
        {   
            ICollectionView collectionView = CollectionViewSource.GetDefaultView(vm.LogLister.Logs);
            collectionView.SortDescriptions.Add(new SortDescription("TimeStampLocal", ListSortDirection.Descending));
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8556302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档