是否可以调整 Observable Collection 的大小或者限制集合项目的最大数量?我有一个 ObservableCollection 作为 View 模型中的属性(使用 MVVM 模式)。
View 绑定(bind)到集合,我试图通过提供一个在 CollectionChanged
时执行的事件处理程序来破解解决方案。事件发生。在事件处理程序中,我通过根据需要从集合顶部删除尽可能多的项目来修剪集合。
ObservableCollection<string> items = new ObservableCollection<string>();
items.CollectionChanged += new NotifyCollectionChangedEventHandler(Items_Changed);
void Items_Changed(object sender, NotifyCollectionChangedEventArgs e)
{
if(items.Count > 10)
{
int trimCount = items.Count - 10;
for(int i = 0; i < trimCount; i++)
{
items.Remove(items[0]);
}
}
}
此事件处理程序产生一个 InvalidOperationException
因为它不喜欢我在 CollectionChanged
期间更改集合这一事实事件。我应该怎么做才能使我的收藏集大小合适?
解决方案:
Simon Mourier 问我是否可以创建一个源自 ObservableCollection<T>
的新系列并覆盖 InsertItem()
这正是我为拥有自动调整大小的 ObservableCollection 类型所做的。
public class MyCollection<T> : ObservableCollection<T>
{
public int MaxCollectionSize { get; set; }
public MyCollection(int maxCollectionSize = 0) : base()
{
MaxCollectionSize = maxCollectionsize;
}
protected override void InsertItem(int index, T item)
{
base.InsertItem(index, item);
if(MaxCollectionSize > 0 && MaxCollectionSize < Count)
{
int trimCount = Count - MaxCollectionSize;
for(int i=0; i<trimCount; i++)
{
RemoveAt(0);
}
}
}
}
最佳答案
您可以派生 ObservableCollection 类并覆盖 InsertItem 方法吗?
关于c# - 如何调整 ObservableCollection 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4305623/