【问题标题】:WPF DataGrid ComboBox Column: Propagating Header Combobox throughout columnWPF DataGrid ComboBox Column:在整个列中传播标题组合框
【发布时间】:2010-11-14 19:01:50
【问题描述】:

你好!这是我的问题:

我在 WPF 中有一个 Datagrid,第一列是 DataGridComboBoxColumn。

我想做的是为该列添加一个带有组合框的标题:更改标题并在整个列中传播。

我可以直观地完成此操作,但是当我提交数据时,与 Datagrid 绑定的列表没有携带新的组合框值。

<dg:DataGridComboBoxColumn SelectedItemBinding="{Binding BIBStatus}"                                            
                           ItemsSource="{Binding Source={StaticResource typeStatus}}" 
                           Width="0.20*">
                    <dg:DataGridComboBoxColumn.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="Built-In Bridge"/>
                                <ComboBox SelectedItem="{Binding BIBStatus}" 
                                          SelectionChanged="ComboBox_SelectionChanged"
                                          ItemsSource="{Binding Source={StaticResource typeStatus}}"/>
                            </StackPanel>                                
                        </DataTemplate>
                    </dg:DataGridComboBoxColumn.HeaderTemplate>
                </dg:DataGridComboBoxColumn>

在 ComboBox_SelectionChanged 我有以下代码:

DataGridColumn comboCol = this.gridResults.Columns[0];

        for (int i = 0; i < this.gridResults.Items.Count; i++)
        {
            ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);

            myCmBox.SelectedValue = ((ComboBox)sender).SelectedValue;
        }

当我提交数据时,我将作为DataContext的列表提交给Datagrid;如果我一次更改针对一行的第一列的值,即单击每行中带有组合框的单元格,这些值将传播到 DataContext 中的列表,但是如果我通过标题更改第一列的值它没有。

谁能告诉我我错过了什么?我猜这是我影响每一行的方式,但我尝试过 SelectedValue、SelectedItem 和 SelectedIndex... 都无济于事。

提前谢谢...

【问题讨论】:

  • 由于您正在执行 2 路数据绑定,因此更改数据源应该会更改组合框的选定项。直接设置 BIBStatus 会发生什么?
  • 我想到了 :) 但问题是当我单击它进行编辑时它只会更新每一行的组合框......否则每一行都保持不变。我猜这个问题可能与触发每行组合框中的 SelectionChanged 事件有关,因为当我选择每行中的值时数据绑定起作用。当我在后面的代码中编辑组合框的值时,不会触发 SelectionChanged 事件,因为它不会在 UI 中发生......有什么猜测吗?

标签: wpf datagrid combobox datagridcolumn


【解决方案1】:

我想我可能已经解决了……或者至少伪装了它……

DataGridColumn comboCol = this.gridResults.Columns[0];

        for (int i = 0; i < this.gridResults.Items.Count; i++)
        {
            ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);
            myCmBox.SelectedItem = ((ComboBox)sender).SelectedItem;
        }

        if (this._results != null)
        {
            foreach (Device device in _results)
            {
                device.BIBStatus = (TypeStatus)Enum.ToObject(typeof(TypeStatus), ((ComboBox)sender).SelectedValue);
            }
        }

我尝试仅更改数据上下文并希望双向绑定能够工作,但只有在我专注于每一行的组合框时才会这样做。所以我想:“为什么不双向呢?” 如您所见,我更改了每个组合框的选定项和每个设备的 BIB 状态(数据上下文部分)。这样我就得到了想要的效果。

但是我不认为这个解决方案是最好的,我仍然希望有一种方法可以做到这一点,而不会成为无赖。

仍然欢迎任何建议!

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 2011-09-20
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多