我有一个 Observable Collection ,其中包含我的数据值。我想在该集合中使用 Orderby ,但我得到一些例外
"Cannot convert IEnumurable to ObservableCollection"
。是否可以使用 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));
}
}
答案 0 :(得分:2)
.OrderBy扩展名返回一个IEnumerable,这会导致您的问题。尝试对吸气剂进行分类也有点糟糕。
我会考虑用ICollectionView
包装你的observable集合即
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));
其中“名称”是您要排序的类库存的名称。
当您添加到可观察集合'stock'时,'Stocks'ICollectionView将会更新,您的视图将按排序顺序显示这些项目。
答案 1 :(得分:0)
你可以尝试
return new ObservableCollection<Stock>(_availableStocks.OrderBy(z=>.Casepack.CasePackContents).ToList());
答案 2 :(得分:0)
如果您的属性类型是Observable集合,您还需要返回一个Observable集合:
if (_availableStocks == null)
{
return null;
}
var orderredStocks = _availableStocks.OrderBy(z => z.Casepack.CasePackContents);
return new ObservableCollection<T>(orderredStocks);
用您的库存类型替换T.
请注意,每次访问该属性时,都会执行排序,因此最好将此代码移动到执行一次的位置,并将其结果返回给属性。
答案 3 :(得分:-1)
OrderBy()是System.Linq上的Extension方法。
您需要在课程的顶部使用System.Lninq。
放
使用System.Lninq;
请先确认一下。
您可以通过...
创建Observable Collection的新实例return new ObservableCollection<SOMETYPE>(_availableStocks.OrderBy(z=>.Casepack.CasePackContents).ToList());