C# 限制项目数量的ListCollectionView
我正在尝试实现一个集合视图,该视图允许限制筛选出的项目的数量 我提出了这个实现C# 限制项目数量的ListCollectionView,c#,wpf,C#,Wpf,我正在尝试实现一个集合视图,该视图允许限制筛选出的项目的数量 我提出了这个实现 public class LimitCollectionView : ListCollectionView { #region CONSTRUCTOR public LimitCollectionView(IList source) : base(source) { } #endregion #region FIELDS private i
public class LimitCollectionView : ListCollectionView
{
#region CONSTRUCTOR
public LimitCollectionView(IList source) : base(source)
{
}
#endregion
#region FIELDS
private int MAX_ITEMS = 0;
#endregion
#region PROPERTIES
/// <summary>
/// Gets or sets maximum amount of view items.
/// </summary>
public int MaxItems
{
get { return MAX_ITEMS; }
set
{
MAX_ITEMS = value;
OnPropertyChanged(new ComponentModel.PropertyChangedEventArgs(nameof(MaxItems)));
RefreshOrDefer();
}
}
#endregion
#region OVERRIDES
/// <summary>
/// Gets the estimated number of records.
/// </summary>
public override int Count
{
get
{
if (IsRefreshDeferred)
return 0;
if (MaxItems <= 0)
return base.Count;
var baseCount = base.Count;
if (MaxItems > baseCount)
return baseCount;
return Math.Min(MaxItems,baseCount);
}
}
public override bool PassesFilter(object item)
{
if (!base.PassesFilter(item))
return false;
if(item!=null)
{
return IndexOf(item) < MaxItems;
}
return true;
}
#endregion
}
公共类LimitCollectionView:ListCollectionView
{
#区域构造函数
public LimitCollectionView(IList源代码):基本(源代码)
{
}
#端区
#区域字段
私有整数最大项=0;
#端区
#区域属性
///
///获取或设置视图项的最大数量。
///
公共整数最大项
{
获取{return MAX_ITEMS;}
设置
{
最大项目=价值;
OnPropertyChanged(新组件模型.PropertyChangedEventArgs(名称)(MaxItems));
RefreshOrDefer();
}
}
#端区
#区域覆盖
///
///获取估计的记录数。
///
公共覆盖整数计数
{
得到
{
如果(IsRefreshDeferred)
返回0;
if(MaxItems baseCount)
返回基本计数;
返回Math.Min(MaxItems,baseCount);
}
}
公共覆盖布尔PassesFilter(对象项)
{
如果(!base.PassesFilter(项目))
返回false;
如果(项!=null)
{
返回(项)我知道我可以手动筛选项目并在更改时重新创建集合,但这超出了CollectionView的目的。“在某些情况下,我会得到System.InvalidOperationException”--哪些情况?我想可能是您在阅读集合时更改了集合,也许可以尝试一下这里的建议并启用CollectionSynchronization是关于虚拟化的吗?为什么您认为子类化
ListCollectionView
是一个好主意?collection视图有一个可观察的集合作为源,并确保在其上使用EnableCollectionSynchronization,因此不应存在竞争条件@Sinatr我不知道这是否是一个好主意,但这是一个要求。“在某些情况下,我得到System.InvalidOperationException”--哪种情况?我想也许你在阅读时正在更改集合,也许可以尝试这里的建议并启用集合同步是关于虚拟化的吗?为什么您认为子类化ListCollectionView
是一个好主意?collection视图有一个可观察的集合作为源,并确保在其上使用EnableCollectionSynchronization,因此不应存在竞争条件@Sinatr我不知道这是不是一个好主意,但这是一个要求。