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
получает и поддерживает свою ценность.
Два способа решить эту проблему:
Записать отчет об ошибке в службу поддержки Microsoft, заявив, что IsSynchronizedWithCurrentItem не всегда работает при использовании TAB.
Свяжите SelectedItem со строкой текущей ячейки, которая хранится в свойстве Item CurrentCell:
<DataGrid SelectedItem="{Binding RelativeSource={RelativeSource Self}, Path=CurrentCell.Item, Mode=OneWay}" />