WPFToolkit DataGrid:组合框列不会立即更新 selectedvaluebinding

Posted

技术标签:

【中文标题】WPFToolkit DataGrid:组合框列不会立即更新 selectedvaluebinding【英文标题】:WPFToolkit DataGrid: Combobox column does not update selectedvaluebinding immediately 【发布时间】:2011-02-21 15:14:56 【问题描述】:

我正在使用 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>

【问题讨论】:

您的 XAML 似乎实际上并未发布,您可以再试一次吗? 【参考方案1】:

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

【讨论】:

【参考方案2】:

问题在于,在您离开该单元并提交更改之前,该单元一直处于编辑模式

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

代码:

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

【讨论】:

太棒了...我喜欢这个解决方案。

以上是关于WPFToolkit DataGrid:组合框列不会立即更新 selectedvaluebinding的主要内容,如果未能解决你的问题,请参考以下文章

将 WPFToolkit DatePickerTextBox 控件重写为自定义组合框控件

WPF DataGrid ComboBox 导致 InvalidOperationException

WPF DataGrid ComboBox 导致 InvalidOperationException

将 List 中的数据放入 DataGrid ComboBox

绑定 DataGrid 列标题 [重复]

WPF DataGrid 列宽和重新排序