c# - 如何调整 ObservableCollection 的大小?

标签 c# collections event-handling observablecollection

是否可以调整 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/

相关文章:

c# - 如何防止我的 HTTP 服务器出现 "sleeping"?

c# - 如何在 C# 中使用 XPath 选择节点?

java - 集合中的顺序是如何运作的?

javascript - jQuery 插件事件监听器未触发或绑定(bind)

javascript - 在 IE 中处理 Javascript 事件顺序

javascript - 动态javascript加载并订阅基于数据的事件?

c# - 使用来自 HttpClient 的 MultipartFormDataContent 发布数据

c# - C# 程序员如何使用 javascript 编写解决方案?

java - 这两组陈述之间的确切区别是什么?

Java 使用 Comparable、Collections.sort() 对自定义对象进行排序