8

この単純な WPF-DataGrid

<DataGrid AutoGenerateColumns="False" Height="300" HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" Name="dgOriginal" Margin="4,12,0,0"
      CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" IsSynchronizedWithCurrentItem="True" 
      CanUserSortColumns="False" SelectionMode="Single" SelectionUnit="FullRow">
<DataGrid.Columns>
    <DataGridCheckBoxColumn x:Name="col2Checked"/>
    <DataGridTextColumn x:Name="col2Name"/>
    <DataGridTextColumn x:Name="col2Vorname"/>
</DataGrid.Columns>            

バインドされたリストを問題なく表示しますが、フォーカスを戻すと奇妙な動作をします: まず、ユーザーが行を選択すると、データグリッドにその行が選択された方法で表示されます (SelectedItem と CurrentItem には、選択されたオブジェクトが含まれます)。 . 次に、別のコントロールにフォーカスが移ります。このステータスでは、選択はまだ表示されています - CurrentItem が null である間、SelectedItem はまだ存在します! そしてTABボタンでフォーカスを戻します。これにより、CurrentItem が、SelectedItem が変更されていないときに表示される最初のオブジェクトになります。したがって、CurrentItem は、DataGrid に表示されるその状態の SelectetItem と一緒にはなりません。そして、私は自分自身にそれが何のために良いと思います...

私の質問は次のとおりです: フォーカスが失われる前に選択されたのと同じ CurrentItem を持つように DataGrid にアドバイスするにはどうすればよいですか? また、CurrentItem と SelectedItem を同期するにはどうすればよいでしょうか?

簡単な解決策を願っています!あなたは私を大いに助けてくれるでしょう。前もって感謝します...

4

2 に答える 2

4

SelectedItem通常、を のプロパティにバインドし、falseDataContextに設定します。IsSynchronizedWithCurrentItem

<DataGrid ItemsSource="{Binding SomeCollection}"
          SelectedItem="{Binding SelectedItem}" />

IsSyncrhonizedWithCurrentItemを true に設定するとSelectedItem、コントロールの がコレクションのプロパティと同期されるようになりますが、その値を取得して維持CurrentItemする方法を常に理解しているとは限らないため、これには問題がありました。CurrentItem

于 2012-02-15T19:57:07.220 に答える