Observable Collection의 크기를 조정하거나 최대 수집 항목 수를 제한 할 수 있습니까? ObservableCollection을 MVVM 패턴을 사용하는 View Model의 속성으로 사용하고 있습니다.ObservableCollection의 크기를 조정하는 방법?
보기가 컬렉션에 바인딩되고 CollectionChanged
이벤트가 발생할 때 실행되는 이벤트 처리기를 제공하여 솔루션을 해킹하려고 시도했습니다. 이벤트 처리기에서 필자는 필요에 따라 컬렉션의 맨 위에서 많은 항목을 제거하여 컬렉션을 잘라 냈습니다. 그것은 내가 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
를 얻을 수 있습니다. 내 수집 물의 크기를 적절하게 유지하려면 어떻게해야합니까?
해결책 : 나는
ObservableCollection<T>
에서 파생 된 새 컬렉션을 만들고 내가 자동 크기 조정 ObservableCollection에 유형을 가지고 그랬던 것 InsertItem()
하고 그게 전부를 대체 할 수 있다면 사이먼 Mourier 물었다.
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);
}
}
}
}
그렇게하는 것이 사소한인가? 나는 대답을 원했고 다른 질문은하지 않았다. – jlafay
당신의 생각은 효과가 있었지만, 더 자세히 설명해 주었으면 좋겠다. 어느 쪽이든, 내 질문에 내 솔루션을 추가하고있다. 도와 주셔서 감사합니다. – jlafay
다행이었습니다. 어쨌든 잘 했어. –