我有一个应该捕获 KeyDown/KeyUp 事件的表单。
此代码在 NRE 中失败,因为它在我当前的视图上查找 KeyDown 控件:
this.BindCommand(ViewModel, vm => vm.KeyDown, "KeyDown");
我所做的是创建将 form 作为属性的包装类,因此我可以使用此重载:
this.BindCommand(ViewModel, vm => vm.KeyDown, v => v.Form, "KeyDown");
虽然它有效,但对我来说似乎是一种黑客行为。有没有正确的方法来绑定本地事件?
如果您使用 BindCommand,这是正确的方法。如果你想摆脱字符串并且你正在使用 ReactiveUI.Events,你也可以这样做:
this.Form.Events().KeyDown
.InvokeCommand(this, x => x.ViewModel.KeyDown);
顺便说一句,“KeyDown”并不是一个非常 MVVM 的命令。我会在视图层编写您的 key => 命令映射,如下所示(通过 TextArea 编码,忽略语法错误):
this.Form.Events().KeyDown
.Where(x => x.Key == Key.C && (x.Modifier & Modifier.Ctrl))
.InvokeCommand(this, x => x.ViewModel.CopyText;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)