5

我正在使用 WPF 工具包 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>
4

2 回答 2

11

UpdateSourceTrigger=PropertyChanged选项在这里至关重要,没有它就不行。

于 2012-01-30T16:15:28.907 回答
3

问题是单元格一直处于编辑模式,直到您离开单元格并提交更改

解决方案:您需要创建自己的列类型来覆盖默认行为

代码:

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);
    }
}
于 2010-05-20T20:26:57.983 回答