[英]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.