You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:22:49