2

DataGrid で選択されている項目を知りたい (それらを ViewModel のコレクションに挿入します)。

選択した項目にバインドすると、行 (1 行) をクリックしたときにのみ変更されますが、Ctrl キーを押しながらクリックすると最初の項目のままになります。

ここで私のDataGrid:

<DataGrid SelectedIndex="{Binding SelectedXIndex}" DataContext="{Binding XViewModel}" SelectedItem="{Binding CurrentX}" ItemsSource="{Binding ListX, Mode=TwoWay}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
     ...
    </DataGrid.Columns>
</DataGrid>

XViewModel には次のものがあります。

SelectedXIndex(int) 選択したインデックス

CurrentX(クラス x のオブジェクト) 現在の選択

ListX- クラス x のリスト

4

3 に答える 3

1

「SelectedItems」(SelectedItem ではない) コレクションを見たことがありますか?

于 2013-02-12T12:08:03.637 に答える
0

DataGrid を拡張するだけで、WPF DataGrid の SelectedItems プロパティへの読み取り専用バインディングを許可する手法を投稿しました。私の答えはhttps://stackoverflow.com/a/16953833/62278で見ることができます

于 2013-06-06T04:51:42.863 に答える
-1

私が行った最初の提案はうまくいきませんでした。歴史的な理由だけでそれらを残します。

問題は、あなたがやりたいことがちょっと奇妙である、またはエラーが発生しやすいということだと最終的に思います。複数選択できるようにするには、バインドを SelectedItem (1 つの項目) に配置します。

個人的には、xaml にバインディングをまったく配置せず (もちろん ItemsSource を除く)、バックエンド コードの selectionChanged イベントで選択の変更を追跡します。この方法をサポートする同様の問題があるリンクは、ここにあります

より良い解決策が見つかることを願っています

古い提案:

これは、単一モード選択の Datagrid のように扱っているように見えるため、問題を解決するはずですが、そのように明示的に定義する必要はありません。

<DataGrid SelectionMode="Single"

選択モードを複数にしたい場合は、SelectedIndex にバインドしないでください

また、SelectedIndex バインディングと SelectedItem バインディングの両方を持っているのも不思議です。いずれにせよ、必要なのは 1 つだけです。

SelectedItem バインディング セット SelectionMode を Extended に設定したままにして、もう一度やり直してください。

于 2013-02-12T11:43:24.907 に答える