【问题标题】:How to Aceess cell level ComboBox in WPF DataGrid?如何在 WPF DataGrid 中访问单元格级别的组合框?
【发布时间】:2025-12-21 15:00:10
【问题描述】:

我的包含组合框的数据网格列模板如下。

<my:DataGridTemplateColumn x:Name="dgColReferece" Header="References"  >
     <my:DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
              <ComboBox x:Name="cmbReferece_SRV" Loaded="cmbReferece_SRV_Loaded" Width="160" SelectionChanged="cmbReferece_SRV_SelectionChanged"
                                                      IsTextSearchEnabled="True" SelectedValue="{Binding Reference,  Mode=TwoWay}" >
              </ComboBox>
          </DataTemplate>
     </my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>

所有组合框都有 Add new 作为其中的一项,其值为 -2。当用户点击 add new 时,一个新项目被添加到数据库中,并且应该被重新绑定到网格中的所有组合框。

下面是SelectionChanged的代码

private void cmbReferece_SRV_SelectionChanged(object sender, SelectionChangedEventArgs e)
   {  ComboBox objComboBox = (ComboBox)sender;

      if (objComboBox.SelectedValue.ToString() == "<-- Add New -->")
      {
           //code for  saving new item entered by user to database

           if (IsSaved)
           {
               DataSet dsReference = (DataSet)GetFStdReference();

               CommonCalls.BindDropDownList(cmbReferece_SRV, dsReference.Tables[0], "Reference", "Reference");
           }

           objComboBox.SelectedValue = -1;

       }

   }

这会将新项目仅绑定到所选行中的组合框。但我需要它绑定到所有组合框?我怎样才能做到这一点。我是 wpf 和绑定东西的新手 > 我该如何继续?

【问题讨论】:

    标签: wpf binding datagrid combobox


    【解决方案1】:

    您上面的代码有点混乱。你能解释更多你想做什么。我可以看到一些与正确的 WPF 编程实践的偏差,尤其是。关于在数据网格中使用组合框。

    例如

    1. 您为什么使用cmbReferece_SRV_SelectionChanged 之类的事件,而不是通过Converter 使用SelectedValueSelectedValuePath
    2. 还有你的ComboBox.ItemsSource 是什么?数据表?对象列表?
    3. 为什么要在自己的SelectionChanged 事件中设置ComboBoxItemsSource,这会适得其反。

    我了解您是 WPF 新手,所以如果您向我解释您的问题,我可以建议一些有用的 WPF 编码实践来解决您的问题。

    【讨论】:

    • 组合框项目来源是 datatable 。我正在重新绑定,因为一旦他选择了“添加新”项目,就会将新项目添加到数据库中。该代码部分未在此处显示,但我提到了它。所以在添加新项目后,我再次重新绑定 daasource 以反映在组合框中添加的新项目
    最近更新 更多