gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:53:31 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com