Caliburn.Micro动作参数不绑定

Gre*_*Gum 4 c# xaml caliburn.micro

我有一个包含以下内容的文本框:

<i:Interaction.Triggers>
 <i:EventTrigger EventName="KeyUp" >                                               
     <cal:ActionMessage MethodName="OnKeyUp" >
          <cal:Parameter Value="$eventArgs"/>
     </cal:ActionMessage>
 </i:EventTrigger>
Run Code Online (Sandbox Code Playgroud)

如果我运行此命令,则会生成一条错误消息,指出"找不到Method OnKeyUp的目标".如果我从消息和方法中删除参数,那么它运行正常.

这是方法.

public void OnKeyUp(object sender, KeyEventArgs e) {
        MessageBox.Show(e.Key.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

我不明白这是什么问题.

dev*_*tal 11

您的视图模型方法有两个参数,但您只传递一个参数.

更改您的视图以通过$source:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="KeyUp">
        <cal:ActionMessage MethodName="OnKeyUp" >
           <cal:Parameter Value="$source" />
           <cal:Parameter Value="$eventArgs" />
        </cal:ActionMessage>
    </i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

或者更改您的方法以获取事件参数:

public void OnKeyUp(KeyEventArgs e) { ... }
Run Code Online (Sandbox Code Playgroud)

你也可以用更好的速记:

<TextBox cal:Message.Attach="[Event KeyUp] = [Action OnKeyUp($source, $eventArgs)]" />
Run Code Online (Sandbox Code Playgroud)