WPF:更新到 .net 框架 4.7.2 后奇怪的组合框行为



升级到.NET Framework 4.7.2后,我注意到ComboBox在进入DataGridTemplateColumn.CellEditTemplate时有一种奇怪的行为。

<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"(带有"null"SelectedItem!这对我的应用程序来说是一个问题。

如何避免此问题?

更新 16/06/2018:我发现仅当组合框 (Items2( 的绑定列表是 SelectedItem 的属性时,才会出现问题。如果我将列表绑定到外部数据上下文(FindAncestor...(,它似乎工作正常。

这是此处记录的错误修复的结果: 修复了使用虚拟化模式=回收滚动数据网格时出现的数据损坏。[405066, PresentationFramework.dll, Bug]。

出现损坏的原因是,即使在单元格退出编辑后,单元格的编辑模板中的绑定仍会继续对更改做出反应。此修复在退出编辑时断开了所有绑定的连接。在您的情况下,将 ComboBox.ItemsSource 设置为 null,这将引发 SelectionChanged 事件。您可以通过测试 ComboBox.ItemsSource 是否为空来轻松忽略此事件。

最新更新