4

ListView最近、WPFコントロールがアイテムの並べ替え機能を制限しているように見える問題に遭遇しました。SortDescription具体的には、ネストされたプロパティ (プロパティのプロパティ) を認識させるのに苦労しています。

プロパティで簡単に並べ替えるには、次の行で作業を行う必要があります。

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

そして実際、それは私にとってうまく機能します。ただし、ItemSourcefor myListViewは (厳密に型指定された)DataTableであるため、一部の列は行のネストされたプロパティにバインドされます (つまり、Row.OtherTableRow.SubPropertyバインド パス スタイル)。これは、ADO.NET DataSet が階層データベースで機能する方法です。

私がやりたいことは次のようなものです:

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

しかし残念ながら、その行は次をスローしArgumentExceptionます:

'Orders' タイプには 'Row.[ID]' という名前のプロパティがないため、データ コレクションを並べ替えることができません。

奇妙なことに、ネストされたプロパティへのバインドに問題はありません。確かに、フィールドは...で完全にうまく表示されます...また、ネストされたプロパティで問題を引き起こすために aをListView追加することもありません-それはただです!PropertyGroupDescriptionlistView.GroupDescriptionsSortDescriptions

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

注: ORM で問題が解決する可能性があることは理解していますが、現在取り組んでいるプロジェクトでは、これはまったく実現可能ではないのではないかと心配しています。単純な ADO.NET DataSet で行う必要があります。

4

2 に答える 2

2

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

于 2009-07-23T21:44:10.117 に答える