我一直在使用此代码,以确定当前行以交互方式进行编辑:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
MyModel myModel = (MyModel) dataGrid.CurrentItem;
int rowIndex = dataGrid.Items.IndexOf(myModel);
[...]
}
此方法的局限性在于,当ComboBox选择以编程方式更改时,也会执行事件处理程序。在这种情况下,CurrentItem
为空,因此我不知道行索引。
TIA
注意:我本身并不需要行索引,我也可以使用模型(CurrentItem
)。
我解决了问题后编辑:请注意上面的代码如何忽略参数(这些参数往往包含真正的重要的内容!!)
答案 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。