将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));
}
}
.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());