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 也包含选定的对象) . 然后将焦点赋予另一个控件。在这种状态下 - 选择仍然显示 - SelectedItem 仍然存在,而 CurrentItem 为空!然后使用 TAB 按钮返回焦点。这使得 CurrentItem 成为在 SelectedItem 未更改时显示的第一个对象。因此,CurrentItem 不会与 SelectetItem 一起处于该状态,这将在 DataGrid 中看到。我心想这对我有什么好处...

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

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

4

2 回答 2

4

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

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

IsSyncrhonizedWithCurrentItem设置为 true 将使SelectedItemControl 与集合的属性同步CurrentItem,但是我遇到了这个问题,因为我并不总是了解如何CurrentItem获取和维护它的值。

于 2012-02-15T19:57:07.220 回答
1

解决此问题的两种方法:

  1. 向 Microsoft 支持部门记录错误报告,指出 IsSynchronizedWithCurrentItem 在您使用 TAB 时并不总是有效。

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

    <DataGrid SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=CurrentCell.Item, Mode=OneWay}" />
    
于 2015-02-25T03:05:41.193 回答