Caliburn.Micro Действие с параметром без привязки

У меня есть текстовое поле со следующим:

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

If I run this, an error message is produced saying "No target found for Method OnKeyUp." If I remove the parameter from the message, and the method, then it runs fine.

Это метод.

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

Я не понимаю, в чем проблема.


person Greg Gum    schedule 27.04.2013    source источник


Ответы (1)


Ваш метод модели представления принимает два параметра, но вы передаете только один.

Либо измените свой вид, чтобы передать $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)]" />
person devdigital    schedule 27.04.2013
comment
Хорошо, теперь я вижу проблему. Спасибо большое. - person Greg Gum; 29.04.2013
comment
как я могу получить доступ к определенному свойству в источнике? например, я пытаюсь $source:Document, но он выдает исключение и говорит, что документ значения не найден. но Document является свойством источника. - person M.kazem Akhgary; 03.03.2018