2012-03-15 5 views
1

상황은 다음과 같습니다. Observable Collection에 오브젝트 묶음이 있고 바인딩을 사용하여 목록 상자에 표시합니다. 그런 다음 주기적으로 외부 서버에서이 개체에 대해 새로운 (또는 가능하면 동일한) 순서를 지정하는 메시지를받습니다. 지금은 관찰 가능한 컬렉션을 지우고 지정된 순서를 사용하여 각 항목을 다시 추가합니다.목록 상자에서 컬렉션을 유동적으로 재정렬하는 방법은 무엇입니까?

너무 좋지 않습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 어떻게 든 목록 순서를 재정렬하고 좋은 재정렬 애니메이션을 가질 수 있다면 정말 좋겠지 만 너무 많이 묻는 것일 수 있습니다.

ObservableCollection의 각 개체에 대한 특성으로 순서를 추가 한 다음 정렬을 호출하는 방법에 대해 생각했습니다. 이게 깨끗해 보이겠습니까? 내 가정은 그것을 지우고 모든 것을 읽을 때와 거의 같은 효과가 있다는 것입니다.

도움 주셔서 감사합니다.

답변

1

ObservableCollection에서 상속받은 클래스를 만들었습니다. 이 클래스에는 새로 주문한 항목을 전달해야하는 SetItems 메서드가 있습니다. 이 클래스의 핵심은 collectionchanged 이벤트를 억제하므로 항목이 추가 될 때마다 목록 상자가 새로 고쳐지지 않는다는 것입니다. 더 좋아 보이며 훨씬 빠르게로드됩니다.

public class SuperObservableCollection<T> : ObservableCollection<T> 
{ 
    public void SetItems(IEnumerable<T> items) 
    { 
     suppressOnCollectionChanged = true; 
     Clear(); 
     AddRange(items); 
    } 

    private bool suppressOnCollectionChanged; 
    public void AddRange(IEnumerable<T> items) 
    { 
     suppressOnCollectionChanged = true; 

     if (items != null) 
     { 
      foreach (var item in items) 
       Add(item); 
     } 

     suppressOnCollectionChanged = false; 
     NotifyCollectionChanged(); 
    } 

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
    { 
     if (!suppressOnCollectionChanged) 
      base.OnCollectionChanged(e); 
    } 

    public void NotifyCollectionChanged() 
    { 
     OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); 
    } 
} 
+0

이 사진은 좋지만 나중에 오늘 또는 내일 촬영할 수 있습니다. 여기에서 업데이트하겠습니다. 도와 주셔서 감사합니다! – Nico

+0

기대했던대로 일했습니다. 다시 한 번 감사드립니다! – Nico

관련 문제