1

さまざまなプロパティを持つCarクラスがあります。

静的な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()には、ソートされるプロパティの名前が含まれます。

では、プロパティ名の前にあるデータ型を削除するにはどうすればよいですか別のリストにあらゆる種類の厄介な読み込みを実行してから、右から最初のスペースを探してその前のすべてを切り刻む一連の文字列処理を実行できることを私は知っています。しかし、確かにもっと簡単な方法があるはずです。

事実上、私が探しているのは、ユーザーがCarクラスの別のプロパティでソートできるようにすることです(したがって、プロパティをどこかにロードして、ユーザーが選択できるようにする必要があります。したがって、コンボボックスです)。私が求めているのは、非常に基本的な要件のように思われるので、すべての文字列操作コードなしで、できればあまり反映せずに(知らないうちにすでに使用している場合を除いて)プロパティのリストを取得する簡単な方法がなければならないということです。

助けてくれてありがとう!

4

1 に答える 1

2

それはまったく厄介ではありません:

        var properties = new List<string>();

        foreach (var info in typeof(Car).GetProperties())
        {
            properties.Add(info.Name);
        }
        cbxSortPrimary.ItemsSource = properties;
于 2012-01-01T05:13:52.960 に答える