使用制表符按钮重新进入后,DataGrid CurrentItem!= SelectedItem

时间:2012-02-15 16:56:38

标签: wpf datagrid focus selecteditem currentitem

这个简单的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>            

它显示了一个没有问题的绑定列表,在获得焦点时表现得很奇怪: 首先,用户选择一行,使得datagrid以选定的方式显示该行(SelectedItem和CurrentItem包含所选对象)。然后重点关注另一个控件。在此状态 - 仍然显示选择 - 当CurrentItem为null时,SelectedItem仍然存在!然后通过使用TAB-Button重新调整焦点。这使得CurrentItem成为第一个在SelectedItem未更改时显示的对象。因此,CurrentItem不会与SelectetItem一起处于可在DataGrid中看到的状态。而且我觉得自己有什么好处......

我的问题是:如何建议DataGrid具有在焦点丢失之前选择的相同CurrentItem?如何同步CurrentItem和SelectedItem?

我希望有一个简单的解决方案!你会帮助我很多。提前谢谢......

2 个答案:

答案 0 :(得分:3)

通常我会将SelectedItem绑定到DataContext中的属性,并将IsSynchronizedWithCurrentItem设置为false。

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

IsSyncrhonizedWithCurrentItem设置为true会使控件的SelectedItem与集合的CurrentItem属性同步,但是由于我不知道,我遇到了这个问题总是理解CurrentItem如何获得并保持其价值。

答案 1 :(得分:0)

解决此问题的两种方法:

  1. 使用Microsoft支持记录错误报告,说明当您使用TAB时,IsSynchronizedWithCurrentItem始终不起作用。

  2. 将SelectedItem绑定到当前单元格的行,该行存储在CurrentCell的Item属性中:

    <DataGrid SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=CurrentCell.Item, Mode=OneWay}" />