2012-02-14 108 views
0

我有一個Observable Collection其中包含我的數據值。我想在該收藏中使用Orderby,但我收到一些例外,如 "Cannot convert IEnumurable to ObservableCollection"。有沒有可能使用OrderBy或給我一些選擇排序收藏將IEnumurable轉換爲Observable Collection而不創建Observable collection的新實例

任何人都請告訴我這個的解決方案。 在此先感謝。

我的代碼是:

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

異常或編譯器錯誤?你能說明這個財產是如何被使用的嗎? – 2012-02-14 05:40:28

+0

其編譯錯誤 – SuryaKavitha 2012-02-14 05:47:49

回答

2

.OrderBy擴展返回一個IEnumerable,它會導致您的問題。試圖在吸氣劑中排序也有些不好。

我會去了解一下與ICollectionView包裹你的觀察集合

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)); 

其中 '名稱' 是該類股票的物業的名你想排序。

當您添加到可觀察集合的「股票」時,「股票」ICollectionView將被更新,並且您的視圖將按排序順序顯示這些項目。

+0

謝謝你的漂亮的code.I嘗試你的代碼一切都很好,但我對這一行有一個疑問「Stocks.SortDescriptions .Add(new SortDescription(「Name」,ListSortDirection.Ascending));「在這一行中,SortDescription()只接受字符串值來排序元素它不接受我的類值。 – SuryaKavitha 2012-02-14 08:14:17

+0

您可以指定屬性的名稱,例如,如果您有一個具有屬性「名稱」和「代碼」的類,並且您想按「名稱」屬性進行排序,則爲SortDescription指定「名稱」。然後這將按照您指定的方向按照該屬性對數據進行排序。 – wdavo 2012-02-14 09:51:53

+0

您能否讓我知道我要在您的代碼中添加我的_availableStocks – SuryaKavitha 2012-02-14 10:45:20

-1

的OrderBy()是在System.Linq的擴展方法。

您需要在您的課堂上使用System.Lninq。

Put

using System.Lninq;

請首先確認。

您可以通過創建觀察集合的新實例...

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

我想將IEnumurable轉換爲Observable集合而不創建新實例oo Observable集合 – SuryaKavitha 2012-02-14 10:32:20

0

你可以嘗試

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

當我使用相同的格式時,我正在收集空集合 – SuryaKavitha 2012-02-14 05:49:47

+0

is _availableStocks empty? – SynXsiS 2012-02-14 05:52:56

+0

是的! _availableStocks count = 0 – SuryaKavitha 2012-02-14 06:03:06

0

如果你的屬性類型是可觀察集合,你需要返回一個可觀測收集太:

if (_availableStocks == null) 
{ 
    return null; 
} 

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

替換T與您的股票類型。

請注意,每次訪問屬性時,都將執行排序,因此,將該代碼移動到其他位置並執行一次,並將其結果返回給屬性可能是一個好主意。

+0

我想將IEnumurable轉換爲Observable Collection而不創建新實例oo Observable collection – SuryaKavitha 2012-02-14 10:31:57

+0

@SuryaKavitha您不能,linq調用返回一個IEnumerable是不是一個ObservableCollection – 2012-02-14 10:33:31

+0

當我創建一個新的實例observable集合,我的集合和新集合都將爲空 – SuryaKavitha 2012-02-14 10:37:17

相關問題