ListView
最近、WPFコントロールがアイテムの並べ替え機能を制限しているように見える問題に遭遇しました。SortDescription
具体的には、ネストされたプロパティ (プロパティのプロパティ) を認識させるのに苦労しています。
プロパティで簡単に並べ替えるには、次の行で作業を行う必要があります。
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
ListSortDirection.Ascending));
そして実際、それは私にとってうまく機能します。ただし、ItemSource
for myListView
は (厳密に型指定された)DataTable
であるため、一部の列は行のネストされたプロパティにバインドされます (つまり、Row.OtherTableRow.SubProperty
バインド パス スタイル)。これは、ADO.NET DataSet が階層データベースで機能する方法です。
私がやりたいことは次のようなものです:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
ListSortDirection.Ascending));
しかし残念ながら、その行は次をスローしArgumentException
ます:
'Orders' タイプには 'Row.[ID]' という名前のプロパティがないため、データ コレクションを並べ替えることができません。
奇妙なことに、ネストされたプロパティへのバインドに問題はありません。確かに、フィールドは...で完全にうまく表示されます...また、ネストされたプロパティで問題を引き起こすために aをListView
追加することもありません-それはただです!PropertyGroupDescription
listView.GroupDescriptions
SortDescriptions
これは WPF/ListView
コントロールの制限ですか? フレームワークの一部としてサポートを受ける方法はありますか? 残念ながら、この不一致が避けられない場合は、ネストされたプロパティのこのシナリオのハックまたは回避策を誰かが提案していただければ幸いです。私はすでにいくつかのアイデアを試しましたが、すべて最小限の成功しか収めていません。
注: ORM で問題が解決する可能性があることは理解していますが、現在取り組んでいるプロジェクトでは、これはまったく実現可能ではないのではないかと心配しています。単純な ADO.NET DataSet で行う必要があります。