2012-01-01 29 views
0

私は様々なプロパティを持つCarクラスを持っています。CollectionViewSource動的にソートする

私は静的なCarsコレクションクラスを用意していますが、簡単にするために、オブジェクトデータプロバイダを介してXAMLで利用できるようなカーアイテムを定義しています。

私はXAMLで定義されたコレクションビューソースを持っています。これは、ObjectDataProviderに正常にバインドされます。

私はコレクションを示すリストボックスを持っています。

すべての標準チュートリアルで推奨されているようにCVSにソートを追加しましたが、すべて正常に動作します。

私の質問: 別のフィールドで並べ替えたいとします。確かに、顧客にコードを渡すことなくこれを変更する方法があります。そこで私はコンボボックスを実装しました。

次のコードを使用して、Carクラスのプロパティのリストをコンボボックスにロードしますが、プロパティのリストを取得するだけではありません。データ型も取得します。私はこれを望んでいない。

Car xyz=new Car(); //Make a temp Car Object so we can get a list of properties. 
//Assign this to the combobox for listing. 
cbxSortPrimary.ItemsSource = xyz.GetType().GetProperties(); 

結果(コンボボックスに表示される内容):

System.String Model 
Double Price 
Int32 NoOfPrevOwners 
DataType PropertyName 
ect... ect... 
ect... ect... 
ect... ect... 

私の目標は、コンボボックスにプロパティ名でロードすることです。そして、次のようなコードの行を構築するために選択したプロパティ名を使用します。

myListBox.Items.SortDescriptions.Add(new SortDescription(ComboBox.SelectedItem.ToString(), ListSortDirection.Descending)); 

どこComboBox.SelectedItem.ToStringは、()でソートするプロパティの名前が含まれます。

so プロパティ名の前にデータ型を取り除くにはどうしたらいいですか? 私は別のリストに多種多様な読み込みを行うことができ、その後、右から最初のスペースを探して、その前にすべてをチョッピングする一連の文字列処理を行うことができます。しかし、確かに簡単な方法が必要です。

私が探しているのは、ユーザーがCarクラスの別のプロパティをソートできるようにすることです(プロパティをどこかにロードして、ユーザーが選択できるようにする必要があります。私が尋ねるのは、すべての文字列操作コードがなくてもプロパティのリストを取得する簡単な方法があり、非常に基本的な要求のように、あまり反映されていないことです。

ありがとうございました!

答えて

1

全然乱雑ではありません。非常に多くのソリューションのためと高速応答のための

 var properties = new List<string>(); 

     foreach (var info in typeof(Car).GetProperties()) 
     { 
      properties.Add(info.Name); 
     } 
     cbxSortPrimary.ItemsSource = properties; 
+0

感謝。よくやった。 –

関連する問題