WPFToolkit DataGrid: столбец Combobox сразу не обновляет selectedvaluebinding

Я использую Инструментарий WPF DataGrid и DataGridComboBoxColumn. Все работает хорошо, за исключением того, что, когда изменение выбора происходит на поле комбинированного списка, selectedvaluebinding источник сразу не обновляется. Это происходит только, когда поле комбинированного списка теряет фокус. Кто-либо столкнулся с этой проблемой и какими-либо решениями для предложений?

Вот xaml для столбца:

<toolkit:DataGridComboBoxColumn Header="Column" SelectedValueBinding="{Binding Path=Params.ColumnName, UpdateSourceTrigger=PropertyChanged}"
                DisplayMemberPath="cName"
                SelectedValuePath="cName">
                <toolkit:DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding Info.Columns}" />
                    </Style>
                </toolkit:DataGridComboBoxColumn.ElementStyle>
                <toolkit:DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding Info.Columns}" />
                    </Style>
                </toolkit:DataGridComboBoxColumn.EditingElementStyle>
            </toolkit:DataGridComboBoxColumn>
5
задан neblinc1 20 May 2010 в 15:24
поделиться

1 ответ

Проблема в том, что ячейка остается в режиме редактирования до тех пор, пока вы не покинете ячейку и изменения не будут зафиксированы

Решение: вам необходимо создать свой собственный тип столбца, чтобы переопределить поведение по умолчанию

код:

public class AutoCommitComboBoxColumn : Microsoft.Windows.Controls.DataGridComboBoxColumn
{
    protected override FrameworkElement GenerateEditingElement(Microsoft.Windows.Controls.DataGridCell cell, object dataItem)
    {
        var comboBox = (ComboBox)base.GenerateEditingElement(cell, dataItem);
        comboBox.SelectionChanged += ComboBox_SelectionChanged;
        return comboBox;
    }

    public void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        CommitCellEdit((FrameworkElement)sender);
    }
}
3
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: