繁体   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