【问题标题】:Listview sorting - Clicking on a column does nothingListview 排序 - 单击列什么也不做
【发布时间】:2018-01-25 14:57:30
【问题描述】:

我想通过单击列进行排序。 Windows 窗体上的一个简单任务....

按照WPF ListView sorting on column click上的答案示例

GridViewColumnHeader _lastHeaderClicked = null;
ListSortDirection _lastDirection = ListSortDirection.Ascending;

void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
    {
        GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
        ListSortDirection direction;

        MessageBox.Show("Clic detected on column: " + headerClicked);

        if (headerClicked != null)
        {
            if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
            {
                if (headerClicked != _lastHeaderClicked)
                {
                    direction = ListSortDirection.Ascending;
                }
                else
                {
                    if (_lastDirection == ListSortDirection.Ascending)
                    {
                        direction = ListSortDirection.Descending;
                    }
                    else
                    {
                        direction = ListSortDirection.Ascending;
                    }
                }

                string header = headerClicked.Column.Header as string;
                Sort(header, direction);

                _lastHeaderClicked = headerClicked;
                _lastDirection = direction;
            }
        }
    }

    private void Sort(string sortBy, ListSortDirection direction)
    {

        MessageBox.Show("I'm inside of the Sort!");

        ICollectionView dataView =
          CollectionViewSource.GetDefaultView(listView.ItemsSource);

        dataView.SortDescriptions.Clear();
        SortDescription sd = new SortDescription(sortBy, direction);
        dataView.SortDescriptions.Add(sd);
        dataView.Refresh();
    }

我使用两个 MessageBox 来检查列是否被选中并且工作正常,即使使用列的内部名称,但列表视图保持不变。没有错误,没有排序。

怎么了?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    这是久经考验的“ListView sort on column header click”代码,您不仅在 stackoverflow 上而且在许多扩展 ListView 的存储库中都看到了这种代码。我强烈怀疑您的问题与上述代码无关。

    【讨论】:

    • 当然,但我不知道我错过了什么。 Listview 上的 Xaml?一些属性要改变?
    • 是的,xaml/binding 可能有问题。我会看看MSDN page 并尝试使该示例正常工作。正如我所说,这段代码在其他 repos 中重复了很多次,所以你也可以在 github 上找到一个,看看它是如何在那里实现的。还要确保您要排序的任何属性都按照您期望的方式排序(如果它是自定义类,则实现 IComparable)。
    猜你喜欢
    • 2021-10-12
    • 2015-08-27
    • 2016-07-08
    • 2012-10-11
    • 2018-12-13
    • 2017-03-16
    • 2020-05-28
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多