После обновления до .NET Framework 4.7.2 я заметил странное поведение ComboBox, когда он находится в DataGridTemplateColumn.CellEditingTemplate.
<DataGrid
IsReadOnly="False"
ItemsSource="{Binding Path=Items, Mode=OneWay}">
<DataGrid.Columns>
<DataGridTemplateColumn
Header="Test"
IsReadOnly="False"
Width="70">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
VerticalAlignment="Center"
TextAlignment="Left"
Text="{Binding Path=Id, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
Name="cmbTest"
DisplayMemberPath=""
HorizontalAlignment="Stretch"
IsEditable="True"
IsEnabled="True"
IsReadOnly="False"
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Path=Items2, Mode=OneWay}"
Margin="0"
SelectedItem="{x:Null}"
SelectedValue="{x:Null}"
SelectedValuePath=""
Text=""
VerticalAlignment="Center"
Visibility="Visible"
SelectionChanged="cmbTest_SelectionChanged">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Перед обновлением событие «cmbTest_SelectionChanged» возникало только при изменении SelectedItem, но теперь (после обновления 4.7.2.) «cmbTest_SelectionChanged» возникает (с «нулевым» SelectedItem!) также при выходе из редактирования ячейки... и это проблема для моего приложения.
Как я могу избежать этой проблемы?
ОБНОВЛЕНИЕ 16/06/2018: я обнаружил, что проблема возникает только тогда, когда список привязки к ComboBox (Items2) является свойством SelectedItem. Если я привязываю список к внешнему контексту данных (FindAncestor...), он работает правильно.