1

複数選択 (SelectedMode = Extended) の WPF データ グリッドがあります。各アイテムには、 https: //stackoverflow.com/a/2615487/284795 ごとに IsSelected バインディングがあります

<DataGrid 
ItemsSource="{Binding Items}"
SelectionUnit="FullRow"
SelectionMode="Extended"
SelectedIndex="{Binding SelectedIndex}"
SelectedItem="{Binding SelectedItem}">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

私は興味がある。DataGrid の SelectedIndex プロパティと SelectedItem プロパティはどのように動作するようになりましたか? データ グリッドで 2 つの項目が選択されている場合、SelectedItem はどちらを指していますか?

また、これらすべてのバインディングが双方向で、ビュー モデルから 1 つを変更すると、他のバインディングは更新されますか? (おそらくこれが原因で、アプリのバグを観察しています)

4

1 に答える 1

2

少し前に同じ質問があり、確認しました。DataGridいくつかのアイテムで を作成し、 を設定し、とプロパティSelectedMode = Extendedの両方にバインディングを作成しました。SelectedItemSelectedIndex

結果は次のとおりです。1 つの項目を選択してから、他の項目を選択して複数選択を行うと、SelectedItemおよびSelectedIndexプロパティが最初に選択した項目になります。したがって、複数選択を行うと、選択したアイテムが最初に選択したアイテムになります。

また、選択された他のすべてのアイテムはSelectedItemsコレクションに含まれます。これは読み取り専用であり(指摘した質問のように)、依存関係プロパティではないため、バインディングを作成することはできません。したがって、選択したすべてのアイテムを取得する場合は、の選択変更イベントを処理してDataGridから、保持するコレクション (選択したアイテム) に新しいアイテムと古いアイテムを手動で追加および削除する必要があります。

私の答えが十分に明確であることを願っています。

于 2012-11-23T18:01:33.667 に答える