双击后获取行信息

我试图在双击事件后从数据网格中检索行信息。 我有事件设置,但现在我只需要设置函数来从行中检索数据。

XAML:

        

C#(MVVM ViewModel):

  public void RowSelect() { //now how to access the selected row after the double click event? } 

非常感谢!

使用Caliburn非常简单,只需在XAML上传递$ dataContext:

  cal:Message.Attach="[Event MouseDoubleClick] = [Action RowSelect($dataContext)]"> 

并将您的方法更改为:

 public void RowSelect(MoviesListItem movie) { //now how to access the selected row after the double click event? } 

//编辑对不起,上面的解决方案只有当操作在datatemplate本身时才有效…另一个解决方案是使用SelectedItem绑定并在你的方法上使用它:

  

在你的代码上:

 public void RowSelect() { //SelectedMovie is the item where the user double-cliked } 

你也可以这样做:

      

然后

 public void RowSelect(MoviesListItem movie) { //now how to access the selected row after the double click event? } 

(希望它会有所帮助)我不确定你的情况,但这就是我在winforms中所做的事情:

  int index = dataGridView2.CurrentRow.Index; //determine which item is selected textBox8.Text = dataGridView2.Rows[index].Cells[0].Value.ToString(); //add login 

您可以通过修改DataGrid公开的DataGridRows的控件模板来完成此操作。 以下示例使用WPF和Aero主题。

我唯一做的就是删除你之前的cal:Message.Attach调用并将其移动到一个新的“占位符”ContentControl,它围绕着“默认”控件模板中的Border(x:Name = DGR_Border)。 (我使用了ContentControl,因为它没有自己的视觉效果,它暴露了MouseDoubleClick事件。)

                                            

你唯一需要做的就是修改你的RowSelect()方法来接受你在这里使用的任何类型的参数(我只是假设它是’电影’类型)。

 public void RowSelect(Movie movie) { // do something with 'movie' } 

我的例子中有一个名为“service_id”的列。 但是你也可以使用int32列偏移量。 DataRowView TYPE中甚至有一个ItemArray可以运行和关闭。 请参见System.Data命名空间。 您的Datagrid项目源/上下文将影响您在Datagrid中看到的“对象”。 但是如果你检查调试类型,那么你可以投射它们并使用它们。

 private void DataGridServiceRegistry_MouseDoubleClick(object sender, MouseButtonEventArgs e) { DataGrid DGSR = (DataGrid) sender; var SR = (DataRowView) DGSR.CurrentItem; var service_id = SR.Row["SERVICE_ID"]; }