アイテムのListViewがあり、ユーザーがコントロールのコードビハインドのイベントハンドラに頼らずにアイテムを選択または選択解除するたびにコードを実行したい - すべてがビュー内で行われているコントロールのdatacontextはに設定されています。バインドを使用した選択リストの変更の表示
ListViewの選択モードが「シングル」の場合、単に「SelectedItem」をビューのプロパティにバインドし、そのプロパティの変更イベントを監視することができます。ただし、選択モードが「複数」の場合、動作は完全に信頼できません。時には、最後にクリックされた項目によってSelectedItemが変更されることがあります。選択モードが単一でない場合、このDependencyPropertyは完全なゴミ箱に見えます。バインディングを使用して、ListViewのSelectedItemsコレクションの変更をどのように追跡できますか?
私はExpressionブレンドを使用しないので、Interaction.Triggersや類似のライブラリソリューションは使用しません。
<ListView ItemsSource="{Binding Path=Zones}"
SelectionMode="Multiple"
SelectedItem="{Binding SelectedZone}">
"コントロールのコードビハインドのイベントハンドラに頼らずに"この文を実際に理解していません。だから、コードビハインドで何かを中継していなければ、どのように 'DataBinding'を作りたいのですか? – Tigran
@Tigran WPFでは、xamlファイル(UI)には、プログラムロジックとListView.SelectionChangedイベントなどのコントロール用のイベントハンドラを含むことができるコードビハインドがあります。 MVVMパターンと呼ばれるものがあります。これは、プロパティをプログラマチックに操作する中間メソッドを使用するのではなく、コントロールをオブジェクトモデルに直接バインドできるように、datacontextとバインディングを使用することです。私のコントロールはそのような方法で基になるデータに束縛されているので、ビューのコードとコントロールのコードビヘイビアの間でこの基礎となるデータに対して行われた作業を分割するのは非常に苦労します。 – Alain
ListViewで仮想化をオフにしてみてください。現在選択されているアイテムと同じ画面にあるアイテムをクリックすると、アイテムにスクロールしなければならない場合とは異なる結果が表示されます。これは奇妙に聞こえるが、私が試みるのはListViewを単一にすることだが、isManuallySelectedに基づいてXAMLの項目をトグル可能(boolプロパティはisManuallySelected)とカスタムプレゼンテーションにして、マルチセレクションのように感じる。 – Paparazzi