2012-02-14 13 views
0

私はObservable Collectionに自分のデータ値が含まれています。 Orderbyをコレクションに使用したいが、 "Cannot convert IEnumurable to ObservableCollection"のような例外がいくつか出てきている。 OrderByを利用するか、いくつかのオプションをに教えてください。を並べ替えるのですか?Observableコレクションの新しいインスタンスを作成せずにIEnumurableをObservableコレクションに変換します。

誰でも私にこの解決方法を教えてください。 ありがとうございます。

私のコードは次のとおり

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

例外またはコンパイラエラー?あなたはどのようにそのプロパティが使用されているかを示すことができますか? –

+0

コンパイルエラー – SuryaKavitha

答えて

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

あなたが並べ替えることを望みます。

observableコレクション 'stocks'に追加すると、 'Stocks' ICollectionViewが更新され、ビューにアイテムがソート順で表示されます。

+0

あなたの素敵なコードをありがとうありがとう。あなたのコードはすべてうまくいっていますが、この行に疑問が1つあります。 "Stocks.SortDescriptions .Add(新しいSortDescription( "Name"、ListSortDirection.Ascending)); "この行では、SortDescription()は、要素を注文する文字列値のみを受け入れ、そのクラス値を受け入れません。 – SuryaKavitha

+0

プロパティの名前を指定します。たとえば、 'Name'および 'Code'プロパティを持つクラスがあり、 'Name'プロパティで並べ替える場合は、SortDescriptionに「Name」を指定します。これにより、指定した方向にデータがそのプロパティでソートされます。 – wdavo

+0

教えてください教えてくださいどこであなたのコードに私の_availableStocksを追加する必要があります – SuryaKavitha

-1

のOrderBy()System.Linqの上の拡張メソッドです。

クラスのトップにSystem.Lninqを使用する必要があります。

put

using System.Lninq;

最初に確認してください。

あなたはあなたの財産の種類が観察コレクションされている場合は、

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

新しいインスタンスを作成せずにIEnumurableをObservable Collectionに変換したいObservable collection – SuryaKavitha

0

によって監視可能なコレクションの新しいインスタンスを作成することができますコレクション:

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

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

Tを在庫に交換してください。

プロパティにアクセスするたびに並べ替えが実行されるため、このコードを一度実行した場所でこのコードを移動し、プロパティで結果を返すことをお勧めします。

+0

この同じ形式を使用しているときに、空のコレクションを取得しています – SuryaKavitha

+0

は空です_availableStocksは空ですか? – SynXsiS

+0

はい! count = 0の_availableStocks – SuryaKavitha

0

を試みることができる、あなたが観察を返却する必要があります...

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

新しいインスタンスを作成せずにIEnumurableをObservableコレクションに変換したい場合はObservableコレクション – SuryaKavitha

+0

@SuryaKavithaできない場合、linq呼び出しはIEnumerableを返しますObservableCollectionではありません –

+0

私は観測可能なコレクションの新しいインスタンスを作成すると、私のcolectionと新しいコレクションの両方が空になります – SuryaKavitha

関連する問題