从ListView排序中排除项目

3
我将使用WPF ListView来显示数据。我已经创建了一个数据模型(用作ListView的DataContex),其中包含一个成员:
private CollectionViewSource itemEntryInfosView;

ListView控件的ItemsSource属性被设置为itemEntryInfosView。假设,itemEntryInfosView中填充了从数据库下载的数据。

为了对数据进行排序[在列标题点击后],我编写了以下方法:

    public void SortList_OnExecuting(object parameter)
    {
        var sortColumn = (string)parameter;
        this.itemEntryInfosView.SortDescriptions.Clear();

        if (this.sortAscending)
        {
            this.itemEntryInfosView.SortDescriptions.Add(
                new SortDescription(sortColumn, ListSortDirection.Ascending));
            this.sortAscending = false;
        }
        else
        {
            this.itemEntryInfosView.SortDescriptions.Add(
                new SortDescription(sortColumn, ListSortDirection.Descending));
            this.sortAscending = true;
        }
    }

假设itemEntryInfoView的源是由ItemEntry类参数化的ObservableCollection(一个简单的类,具有一些公共属性,ListView为每个属性定义列)。
一切都运作得很好,但我需要添加一个功能。我需要一个特殊行来表示像“添加新行”这样的东西。我认为这样的一行可以继承自ItemEntry。该行应该被排除在排序之外。 (假设它总是在ListView的末尾)。我如何实现这样的功能?
2个回答

3
你可以使用CompositeCollection
<ListView>
    <ListView.ItemsSource>
        <CompositeCollection>
            <ListBoxItem Content="Add New" />
            <CollectionContainer Collection="{Binding Source={StaticResource ItemEntryInfosView}}" />
        </CompositeCollection>
    </ListView.ItemsSource>
</ListView>

0

一个选择可能是考虑使用第三方控件,它已经为您提供了所需的功能。例如,WPF Extended Toolkit 包括一个 DataGrid


WPF 4 中也包括了 DataGrid。 - Eli Arbel
如果其他方法都失败了,我会考虑使用它。我希望有其他解决方案,我担心我没有时间用DataGrid替换ListView(嗯,也许不是很难?)第二件事-我不需要添加新行。我只是用它作为示例来展示需要实现的内容。在我的情况下,我需要执行一个不影响当前项目的方法(仅此而已)。 - user2160375
如果你只需要一个按钮,为什么不把它添加到DockPanel或其他位置的列表上方呢? - Eli Arbel
考虑文件管理器。大多数文件管理器在列表顶部包含“返回上一级目录”的选项。我需要类似的效果。无论如何,在这种情况下,CompositeCollection 的效果非常好。 - user2160375

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接