DevExpress WinForms中如何通过EventToCommand将行数据传递给ViewModel?
解决方法:在Show方法中获取双击行的Student数据
我来帮你搞定这个需求,其实只需要修改两处代码,就能让ViewModel的Show方法拿到双击行对应的Student实例:
1. 调整ViewModel的Show方法,添加Student参数
首先把ViewModel里的Show方法改成接收Student类型的参数,这样就能直接拿到对应的数据:
public void Show(Student student) { // 这里可以直接使用student对象的任意属性,比如Name、Id等 messageBoxService.ShowMessage($"Row Clicked: {student.Name}"); }
2. 修改EventToCommand的参数映射
接下来在视图构造函数的事件绑定代码里,添加参数转换逻辑,把双击行对应的Student对象传递给Show方法:
mvvmContext1.WithEvent<MyViewModel, RowClickEventArgs>(gridView1, "RowClick") .EventToCommand( x => x.Show(null), // 传入null作为默认占位符,实际会被后面的参数替换 v => (v.Clicks == 2) && (v.Button == MouseButtons.Left), // 原有的双击触发条件保持不变 args => gridView1.GetRow(gridView1.FocusedRowHandle) as Student // 核心:获取当前选中行的Student对象 );
原理说明
gridView1.FocusedRowHandle会返回当前双击行的句柄,GetRow方法可以根据这个句柄获取到绑定到该行的原始数据对象,我们直接把它转换成Student类型,就能传递给ViewModel的Show方法了。
注意事项
- 确保你的GridView数据源确实是
Student类型的集合(比如List<Student>),这样GetRow才能正确转换为Student对象。 - 如果你的数据源是其他类型(比如DataTable),需要调整转换逻辑,但根据你的描述,数据是
Student类型,所以这个方案完全适用。
内容的提问来源于stack exchange,提问作者user9035668
相关产品推荐
相关产品推荐

