2009-07-23 19 views
1

私は最近、WPF ListViewコントロールが項目を並べ替える機能を制限しているような問題を見つけました。具体的には、SortDescriptionにネストされたプロパティ(プロパティのプロパティ)を認識させることに多大な労力をかけています。WPF ListView - ネストされたプロパティによる並べ替え

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty", 
    ListSortDirection.Ascending)); 

をそして実際、それは私のためによく働く:

propretiesによってストレートフォワードソートするために、次の行は、仕事をする必要があります。ただし、ListViewItemSourceは(厳密にタイプされた)DataTableであるため、列のネストされたプロパティ(つまり、Row.OtherTableRow.SubPropertyバインディングパススタイル)にバインドされている列もあります。これはADO.NET DataSetsが階層データベースに対して機能する方法です。私がやりたい何

は次のようなものです:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty", 
    ListSortDirection.Ascending)); 

しかし残念ながら、その行はArgumentExceptionスロー:。

行」という名前のプロパティを持っていない「注文」タイプ[IDを] 'のため、データ収集をソートできません。

奇妙にも、ネストされたプロパティにバインドするのに問題はありません。実際、フィールドはListViewで完全にうまく表示されます... PropertyGroupDescriptionlistView.GroupDescriptionsに追加すると、ネストされたプロパティに問題が発生しません。これは唯一SortDescriptionsです!

これはWPF/ListViewの制限ですが、コントロールですか?フレームワークの一環としてサポートを得る方法はありますか?それとも運が悪いのですか?残念ながら、この不一致が避けられない場合は、誰かがこのネストされたプロパティのシナリオに対してハックまたは回避策を提案できるかどうか、大変感謝しています。私はすでにいくつかのアイデアを試してきましたが、すべて最小限の成功を収めました。

注:私はORMが私の問題をうまく解決するかもしれないことを認識していますが、私が取り組んでいる現在のプロジェクトではこれは実現できません。シンプルなADO.NET DataSetsが行う必要があります。

答えて

1

Windows Presentation Foundation Unleased(Adam Nathan)によれば、既定のビューをListCollectionViewにキャストし、カスタムIComparer実装をCustomSortプロパティに設定できます。

+0

よろしくお願いします。他の高度なシナリオをうまくカバーすれば、その本を見てみることもできます。 :) – Noldorin

関連する問題