如何在RelayCommand的表达式体成员中传递参数至Close方法?
解决RelayCommand传递参数到Close方法的问题
你的问题出在ViewModel中没有把RelayCommand接收到的参数传递给Close方法,以下是具体修正方案:
1. 修改ViewModel的CloseCommand定义
当前你的CloseCommand创建时,lambda表达式没有接收RelayCommand传递的参数,需要把参数传入Close方法:
// 修正后的CloseCommand public RelayCommand CloseCommand => new RelayCommand(param => Close(param as Window));
2. 完善Close方法的空值检查
为了避免参数转换失败导致空引用异常,在Close方法中增加null判断:
private void Close(Window window) { if (window == null) return; // 空值保护 // 你的业务逻辑... window.Close(); }
替代方案:直接在lambda中处理逻辑
如果不想单独写Close方法,也可以直接在Command的lambda里完成逻辑,这样更简洁:
public RelayCommand CloseCommand => new RelayCommand(param => { if (param is Window window) { // 你的业务逻辑... window.Close(); } });
为什么原来的代码不生效?
你的RelayCommand实现是正确的,XAML中CommandParameter={Binding ElementName=DetalhePassoMW}也能正确传递Window实例,但你原来的execute => Close()没有接收这个参数,导致Close方法始终拿不到Window对象,自然无法执行关闭操作。
内容的提问来源于stack exchange,提问作者user1992831
相关产品推荐
相关产品推荐

