WPFToolkit DataGrid: столбец Combobox не обновляет привязку выбранного значения сразу - PullRequest
5 голосов
/ 20 мая 2010

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

Вот 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>

Ответы [ 2 ]

11 голосов
/ 30 января 2012
Опция

UpdateSourceTrigger=PropertyChanged здесь крайне важна, без нее не обойтись.

3 голосов
/ 21 мая 2010

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

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

код:

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);
    }
}
...