バインディングを介してListBox
動的に入力する があります (これは で定義されてDataTemplate
いるため、バインディングはやや珍しいです)。
<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
のプロパティは、カスタム オブジェクトIsSelected
のプロパティにバインドされます。IsSelected
個々ListBoxItem
の を選択すると、バインドが適切に機能します。ViewModel でカスタム オブジェクトのIsSelected
プロパティが更新されます。ただし、ListBoxItem
Ctrl+A コマンドですべての を選択すると、現在表示ListBoxItem
されている のみ (現在スクロール ビューポートにあるもの) のみが ViewModel バインディングを更新します。フロントエンドでは、すべてのListBoxItem
が選択されているように見えListBox.SelectedItems.Count
、コンテナのプロパティはListBox
すべてのアイテムが選択されていることを示しています。
さらに、 Ctrl+A でListBox
すべての s を選択した後にスクロールするListBoxItem
と、それぞれがスクロールして表示されるとバインディングが正常に更新ListBoxItem
されます。
このバインドが部分的にしか機能していないように見えるのはなぜですか? IsSelected
多数をListBoxItems
同時に選択できる場合、プロパティのバインドを処理するより良い方法はありますか?
編集: この動作は、Ctrl+A コマンドだけで発生するわけではありません。Shift+クリックを使用してすべての項目を選択すると、同じ結果が得られます。