Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问WPF数据网格中的单元级组合框?_Wpf_Binding_Datagrid_Combobox - Fatal编程技术网

如何访问WPF数据网格中的单元级组合框?

如何访问WPF数据网格中的单元级组合框?,wpf,binding,datagrid,combobox,Wpf,Binding,Datagrid,Combobox,我的数据网格列模板中有组合框,如下所示 <my:DataGridTemplateColumn x:Name="dgColReferece" Header="References" > <my:DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox x:Name="cmbReferece_SRV" Loaded="cmbRefere

我的数据网格列模板中有组合框,如下所示

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

这将仅将新项绑定到选定行中的组合框。但我需要它绑定到所有的组合框?我怎样才能做到这一点。我不熟悉wpf和binding Stuff>如何继续?

您上面的代码有点混乱。你能再解释一下你想做什么吗。我可以看到一些与正确的WPF编程实践的偏差,特别是关于在datagrid中使用组合框

例如

  • 为什么要使用诸如
    cmbReferece\u SRV\u selection changed
    之类的事件,而不通过
    转换器使用
    SelectedValue
    SelectedValuePath
  • 还有,什么是您的
    组合框.ItemsSource
    ?数据表?物品清单
  • 为什么要在其自己的
    SelectionChanged
    事件中设置组合框的
    ItemsSource
    ,这会适得其反

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

    组合框项目源是datatable。我正在重新绑定,因为一旦他选择了“addnew”项,一个新项就会被添加到数据库中。这里没有显示代码部分,但我提到了它。因此,在添加新项目后,我再次绑定daasource,以反映组合框中添加的新项目
    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;
    
           }
    
       }