WPF: странное поведение ComboBox после обновления до .net framework 4.7.2 - PullRequest
0 голосов
/ 15 мая 2018

После обновления до .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» вызывается (с «null» SelectedItem!) Также при выходе из режима редактирования ячейки. ..и это проблема для моего приложения.

Как мне избежать этой проблемы?

ОБНОВЛЕНИЕ 16/06/2018: я обнаружил, что проблема возникает только тогда, когда список привязок к ComboBox (Items2) является свойством SelectedItem. Если я привяжу список к внешнему текстовому тексту (FindAncestor ...), он, кажется, будет работать правильно.

1 Ответ

0 голосов
/ 16 мая 2018

Это является следствием найденной ошибки здесь : Исправлено повреждение данных, возникающее при прокрутке DataGrid с VirtualizationMode = Recycling. [405066, PresentationFramework.dll, ошибка].

Повреждение возникло из-за того, что привязки в шаблоне редактирования ячейки продолжали реагировать на изменения, даже после того, как ячейка вышла из редактирования. Исправление отключило все привязки при выходе из редактирования. В вашем случае это устанавливает ComboBox.ItemsSource в null, что вызывает событие SelectionChanged. Вы можете легко проигнорировать это событие, проверив, имеет ли ComboBox.ItemsSource значение null.

...