2012-03-15 6 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

関連する問題