从ListView排序中排除项
本文关键字:排除 排序 ListView | 更新日期: 2023-09-27 18:03:33
我使用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类参数化的ObserverableCollection(具有一些公共属性的简单类,ListView为每个属性定义列)
一切都像一个chram,但我需要添加一个功能。我需要一个特殊的行来表示"添加新行"之类的东西。我认为这样的行可以从ItemEntry继承。该行应该被排除在排序之外。(假设它应该总是在ListView的末尾)。我如何才能实现这样的功能?
您可以使用CompositeCollection
:
<ListView>
<ListView.ItemsSource>
<CompositeCollection>
<ListBoxItem Content="Add New" />
<CollectionContainer Collection="{Binding Source={StaticResource ItemEntryInfosView}}" />
</CompositeCollection>
</ListView.ItemsSource>
</ListView>
一种选择可能是考虑已经为您提供功能的第三方控件。例如,WPF扩展工具包包括一个DataGrid。