5

私は WPF Toolkit 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>
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 に答える