を結合私は結合(これは、結合がやや異例である理由である、DataTemplate
で定義されている)を介して動的に取り込むListBox
を持っている:リストボックス「IsSelected」部分的にしか作業
<ListBox SelectionMode="Extended" ItemsSource="{Binding DataContext.ResultList, RelativeSource={RelativeSource AncestorType=Window}}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Object}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
各ListBoxItem
" s IsSelected
プロパティは、カスタムオブジェクトのIsSelected
プロパティにバインドされています。
個別にListBoxItem
を選択すると、バインドが正しく機能します。カスタムオブジェクトのIsSelected
プロパティが、自分のViewModelで更新されます。ただし、Ctrl + AコマンドでListBoxItem
をすべて選択すると、現在表示されているListBoxItem
(現在スクロールしているビューポートにあるもの)のみがViewModelバインディングを更新します。フロントエンドでは、ListBoxItem
がすべて選択されているように見え、ListBox
のListBox.SelectedItems.Count
プロパティはすべての項目が選択されていることを示します。
さらに、ListBoxItem
をCtrl + Aで選択した後にListBox
をスクロールすると、各ListBoxItem
がスクロールされて表示されると、バインディングが正常に更新されます。
なぜこのバインディングは部分的にしか機能していないようですか?多数のListBoxItems
を同時に選択できるときに、IsSelected
プロパティのバインドを処理するより良い方法はありますか?
編集: この動作は、Ctrlキー+コマンドで独占的に発生しません - シフト+クリックを使用して、すべての項目を選択するとき、私は同じ結果を得ます。
私はUIに依存せず、 'KeyBinding'を入れてViewModelでやるか、いくつかのコードを後ろに置き、選択ロジックをVMに委譲します。または、そのキーの組み合わせに反応する行動または何かを入れます。 –
@HighCore - Select Allコマンドでのみ問題は発生しません。シフト+クリックを使用してすべてのアイテムを選択すると同じ問題が発生します。 –
私はこの同じ種類の問題に遭遇しました。私はあきらめて、[SelectedItems](http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.selecteditems.aspx)へのバインディングをクリックハンドラの引数として使用しました。ボタンを押して、それを1日と呼びました(コマンドのCommandParameterとして使用することもできます)。リストが長くなったときに仮想化を無効にすることは、パフォーマンスにはあまり価値がないのです。 –