Caliburn.Micro中带参数的Action未绑定。

5

我有一个文本框,其中包含以下内容:

<i:Interaction.Triggers>
 <i:EventTrigger EventName="KeyUp" >                                               
     <cal:ActionMessage MethodName="OnKeyUp" >
          <cal:Parameter Value="$eventArgs"/>
     </cal:ActionMessage>
 </i:EventTrigger>

如果我运行这个程序,会出现一个错误提示消息,显示“找不到OnKeyUp方法的目标”。如果我从消息和方法中删除参数,则可以正常运行。

这是该方法:

public void OnKeyUp(object sender, KeyEventArgs e) {
        MessageBox.Show(e.Key.ToString());
    }

我不明白问题出在哪里。
1个回答

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>

或者更改您的方法,仅接受事件参数:

public void OnKeyUp(KeyEventArgs e) { ... }

你也可以使用更简洁的缩写形式:

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

好的,我现在明白问题了。非常感谢。 - Greg Gum
我怎么访问源中的特定属性?例如,我尝试使用$source:Document,但它抛出异常并说找不到值 Document。但是,Document 是源的一个属性。 - M.kazem Akhgary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接