DataGrid CurrentItem! = SelectedItem после повторного входа с помощью вкладки - PullRequest
6 голосов
/ 15 февраля 2012

Этот простой 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 ]

3 голосов
/ 15 февраля 2012

Обычно я связываю SelectedItem со свойством в DataContext и устанавливаю IsSynchronizedWithCurrentItem в false.

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

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

0 голосов
/ 25 февраля 2015

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

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

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

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