DataGrid CurrentItem!= SelectedItem после повторного входа с помощью вкладки

Этот простой 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 имеет значение NULL! И затем фокус возвращается с помощью кнопки TAB. Это делает CurrentItem первым объектом, который отображается, пока SelectedItem не изменяется. Таким образом, CurrentItem не идет вместе с SelectetItem в том состоянии, которое можно увидеть в DataGrid. И я думаю про себя, что это хорошо для...

Мой вопрос: Как посоветовать DataGrid иметь тот же CurrentItem, который был выбран до потери фокуса? И как можно синхронизировать CurrentItem и SelectedItem?

Я надеюсь на простое решение! Вы бы мне очень помогли. Заранее спасибо...

2 ответа

Обычно я связываю SelectedItem в собственность в DataContextи установить IsSynchronizedWithCurrentItem ложно.

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

Если для IsSyncrhonizedWithCurrentItem задано значение true, SelectedItem Управления синхронизируется с CurrentItem свойство коллекции, однако у меня были проблемы с этим, так как я не всегда понимаю, как CurrentItem получает и поддерживает свою ценность.

Два способа решить эту проблему:

  1. Записать отчет об ошибке в службу поддержки Microsoft, заявив, что IsSynchronizedWithCurrentItem не всегда работает при использовании TAB.

  2. Свяжите SelectedItem со строкой текущей ячейки, которая хранится в свойстве Item CurrentCell:

    <DataGrid SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=CurrentCell.Item, Mode=OneWay}" />
    
Другие вопросы по тегам