私は最近、WPF ListView
コントロールが項目を並べ替える機能を制限しているような問題を見つけました。具体的には、SortDescription
にネストされたプロパティ(プロパティのプロパティ)を認識させることに多大な労力をかけています。WPF ListView - ネストされたプロパティによる並べ替え
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
ListSortDirection.Ascending));
をそして実際、それは私のためによく働く:
propretiesによってストレートフォワードソートするために、次の行は、仕事をする必要があります。ただし、ListView
のItemSource
は(厳密にタイプされた)DataTable
であるため、列のネストされたプロパティ(つまり、Row.OtherTableRow.SubProperty
バインディングパススタイル)にバインドされている列もあります。これはADO.NET DataSetsが階層データベースに対して機能する方法です。私がやりたい何
は次のようなものです:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
ListSortDirection.Ascending));
しかし残念ながら、その行はArgumentException
スロー:。
行」という名前のプロパティを持っていない「注文」タイプ[IDを] 'のため、データ収集をソートできません。
奇妙にも、ネストされたプロパティにバインドするのに問題はありません。実際、フィールドはListView
で完全にうまく表示されます... PropertyGroupDescription
をlistView.GroupDescriptions
に追加すると、ネストされたプロパティに問題が発生しません。これは唯一SortDescriptions
です!
これはWPF/ListView
の制限ですが、コントロールですか?フレームワークの一環としてサポートを得る方法はありますか?それとも運が悪いのですか?残念ながら、この不一致が避けられない場合は、誰かがこのネストされたプロパティのシナリオに対してハックまたは回避策を提案できるかどうか、大変感謝しています。私はすでにいくつかのアイデアを試してきましたが、すべて最小限の成功を収めました。
注:私はORMが私の問題をうまく解決するかもしれないことを認識していますが、私が取り組んでいる現在のプロジェクトではこれは実現できません。シンプルなADO.NET DataSetsが行う必要があります。
よろしくお願いします。他の高度なシナリオをうまくカバーすれば、その本を見てみることもできます。 :) – Noldorin