2013-04-27 136 views
3

我有如下一個文本框:Caliburn.Micro動作與參數不具約束力

<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()); 
    } 

我不明白是什麼問題。

回答

10

你的視圖模型方法有兩個參數,但你只傳遞一個參數。

要麼改變你的觀點傳遞$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)]" /> 
+0

好的,我現在看到了這個問題。非常感謝。 – 2013-04-28 21:49:53

+0

如何訪問源中的特定屬性?例如我嘗試'$源:文檔',但它會拋出異常,並說沒有找到值文檔。但Document是源的屬性。 – 2018-03-03 13:20:16