将IEnumurable转换为Observable Collection,而不创建Observable集合的新实例

本文关键字:Observable 新实例 集合 创建 实例 转换 IEnumurable Collection | 更新日期: 2023-09-27 18:24:34

我有一个Observable Collection,其中包含我的数据值。我想在该集合中使用Orderby,但我遇到了一些异常,比如CCD_ 1。是否可以使用OrderBy或给我一些排序集合的选项?

任何人都请告诉我这个问题的解决方案。提前谢谢。

我的代码是:

get {
     return _availableStocks == null ? null : _availableStocks .OrderBy(z => z.Casepack.CasePackContents);   
     // Here _availableStocks is my collection
     //Here i am not able to use orderby in this collection Its showing error line
     // Here i need to sort the _availableStocks 
    }

我的实际代码是:

   foreach (var cachedStock in AvailableSelectedStocks)
      {
          if (SelectedStock != null)
          {
            AvailableStocks= CollectionViewSource.GetDefaultView(_availableStocks);
            AvailableStocks.SortDescriptions.Add(new SortDescription(SelectedStock.Casepack.CasePackContents.Count.ToString(), ListSortDirection.Ascending));
            //In this above line i am getting the Sort descriptions only i am not getting the datas in the SourceCollection . how can i get values in this Collection
            this.SelectedStocks.Remove(SelectedStock);
            this.RaisePropertyChanged(Member.Of(() => AvailableStocks));
         }
      }

将IEnumurable转换为Observable Collection,而不创建Observable集合的新实例

.OrderBy扩展返回一个IEnumerable,这导致了您的问题。尝试在getter中进行排序也有点糟糕。

我会考虑用ICollectionView 包装您的可观察收藏

I.e

public ICollectionView Stocks { get; private set; }
private readonly ObservableCollection<Stock> stocks;

建造商

  stocks = new ObservableCollection<Stock>();
  Stocks = CollectionViewSource.GetDefaultView(stocks);
  Stocks.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

其中"Name"是您希望排序的Stock类的属性的名称。

当您将"stocks"添加到可观察集合时,"stocks"ICollectionView将更新,您的视图将按排序顺序显示项目。

您可以尝试

return new ObservableCollection<Stock>(_availableStocks.OrderBy(z=>.Casepack.CasePackContents).ToList());

如果您的属性类型是Observable集合,您也需要返回Observable收集:

if (_availableStocks == null)
{
  return null;
}
var orderredStocks = _availableStocks.OrderBy(z => z.Casepack.CasePackContents);
return new ObservableCollection<T>(orderredStocks);

用您的库存类型替换T。

请注意,每次访问该属性时,都会执行排序,因此最好将此代码移到执行一次并由该属性返回结果的其他位置。

OrderBy()是System.Linq.上的Extension方法

你需要在课堂上使用System.Lninq。

放入

使用System.Lninq;

请先确认一下。

您可以通过…创建Observable Collection的新实例

return new ObservableCollection<SOMETYPE>(_availableStocks.OrderBy(z=>.Casepack.CasePackContents).ToList());