簡體   English   中英

與排序列表的數據綁定

[英]Data Binding with a Sorted List

我的 UI 有一個綁定到 Collection 的 ListBox。 現在這恰好是一個 ObservableCollection

我的目標是通過 UI 將對象添加到此集合中,並讓 ListBox 動態更新,同時保持已排序的集合。

我知道有一些 SortedView 可以在 WPF 中使用。 但這不是我想要的——我需要實際的 Collection 保持排序,因為我的業務邏輯需要一個排序的集合。

我想到的一種方法是創建我自己的 Collection class,它在內部使用 SortedList,並實現 INotifyCollectionChanged 接口並在內部列表更改時生成 NotifyCollectionChangedEventArgs 事件。 聽起來工作量很大!

有沒有我錯過的簡單解決方案?

根據您的確切需求,最簡單的方法是保留您的 ObservableCollection,但包含在 ICollectionView 類型的新屬性中:

public class MyViewModel {
  private CollectionViewSource _collectionViewSource;

  public ICollectionView MyCollectionView  => _collectionViewSource.View;

  public MyViewModel(ObservableCollection<MyDataItem> dataItems) {
      _collectionViewSource = new CollectionViewSource() { Items = dataItems };
      //Add sorting here using _collectionViewSource.SortDescriptions.Add(...)
  }

您可以根據需要使用 wrapper 屬性提取排序列表。

好的,所以我最終繼承了 ObservableCollection,並覆蓋了 Add() 方法。 這對我有用。 現在我的列表總是排序的,並且 ObservableCollection 是通知 UI 更改的列表。

   public class MyCollection : ObservableCollection<Int32>
   {
      public new void Add(Int32 x)
      {
         base.Add(x);
         var oldList = new ObservableCollection<Int32>(this.OrderBy(c=>c));

         Clear();
         foreach(var i in oldList)
         {
            base.Add(i);
         }
      }
   }

我是 C# 的初學者,感謝您對代碼的任何反饋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM