ion*_*noy 3 c# winforms reactiveui
我有一个应该捕获KeyDown/KeyUp事件的表单.
此代码因NRE而失败,因为它在我当前视图中查找KeyDown控件:
this.BindCommand(ViewModel, vm => vm.KeyDown, "KeyDown");
Run Code Online (Sandbox Code Playgroud)
我所做的是创建了包装类,它具有作为属性的形式,所以我可以使用这个重载:
this.BindCommand(ViewModel, vm => vm.KeyDown, v => v.Form, "KeyDown");
Run Code Online (Sandbox Code Playgroud)
虽然它有效但对我来说似乎是一个黑客.有没有正确的方法来绑定本地事件?
如果您正在使用BindCommand,这是正确的方法.如果你想摆脱字符串并且你正在使用ReactiveUI.Events,你也可以这样做:
this.Form.Events().KeyDown
.InvokeCommand(this, x => x.ViewModel.KeyDown);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,"KeyDown"不是一个非常MVVM的命令.我在View层编写你的key =>命令映射,就像这样(通过TextArea编码,忽略语法错误):
this.Form.Events().KeyDown
.Where(x => x.Key == Key.C && (x.Modifier & Modifier.Ctrl))
.InvokeCommand(this, x => x.ViewModel.CopyText;
Run Code Online (Sandbox Code Playgroud)