WPF DataGrid:如何确定ComboBox选择更改的行的索引?

时间:2013-12-14 03:36:56

标签: wpf datagrid combobox

我一直在使用此代码,以确定当前行以交互方式进行编辑

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MyModel myModel = (MyModel) dataGrid.CurrentItem;
    int rowIndex = dataGrid.Items.IndexOf(myModel);
    [...]
}

此方法的局限性在于,当ComboBox选择以编程方式更改时,也会执行事件处理程序。在这种情况下,CurrentItem为空,因此我不知道行索引。

TIA

注意:我本身并不需要行索引,我也可以使用模型(CurrentItem)。

我解决了问题后编辑:请注意上面的代码如何忽略参数(这些参数往往包含真正的重要的内容!!)

2 个答案:

答案 0 :(得分:3)

这就是我要找的......

private void ComboBoxRight_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox comboBox    = (ComboBox) sender;
    DataGridRow row      = (DataGridRow) dataGrid.ContainerFromElement(comboBox);
    int rowIndex         = row.GetIndex();
    MyModel gridModel    = (MyModel) dataGrid.Items[rowIndex];
}

-Travis

答案 1 :(得分:0)

您可以使用dateGrid.Selected索引来查找是从UI设置值还是在

后面设置代码
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   if(dataGrid.Selected>=0)
   {
     MyModel myModel = (MyModel) dataGrid.CurrentItem;
     int rowIndex = dataGrid.Items.IndexOf(myModel);
      [...]
     dataGrid.Selected=-1;
   }

}

在上面的情况下,即使认为comobox选择改变,当值从代码后面改变时调用,dataGrid选择索引将为-1。但是当用户从Ui更改它时,您将获得特定行的选定索引,并且它将再次设置为-1。