2013-12-14 82 views
0

我已经使用此代码,以确定当前行被交互编辑:WPF DataGrid:如何确定ComboBox选择更改的行的索引?

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

这种方法的限制是,还执行事件处理程序,当在组合框选择改变编程 。在这种情况下,CurrentItem为空,因此我不知道行索引。

TIA

注:我并不真的需要行索引本身,我可以使用模型(CurrentItem)为好。

编辑后,我解决了这个问题:请注意上面的代码如何忽略的参数(这往往含有真正重要东西!!)

回答

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

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选择改变调用,的数据网格选择的索引将为-1。但是,当用户从UI改变它时,你会得到特定行的选定索引,并且它会再次设置为-1。