5

バインディングを介して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プロパティが更新されます。ただし、ListBoxItemCtrl+A コマンドですべての を選択すると、現在表示ListBoxItemされている のみ (現在スクロール ビューポートにあるもの) のみが ViewModel バインディングを更新します。フロントエンドでは、すべてのListBoxItemが選択されているように見えListBox.SelectedItems.Count、コンテナのプロパティはListBoxすべてのアイテムが選択されていることを示しています。

さらに、 Ctrl+A でListBoxすべての s を選択した後にスクロールするListBoxItemと、それぞれがスクロールして表示されるとバインディングが正常に更新ListBoxItemされます。

このバインドが部分的にしか機能していないように見えるのはなぜですか? IsSelected多数をListBoxItems同時に選択できる場合、プロパティのバインドを処理するより良い方法はありますか?

編集: この動作は、Ctrl+A コマンドだけで発生するわけではありません。Shift+クリックを使用してすべての項目を選択すると、同じ結果が得られます。

4

1 に答える 1