(Caliburn Micro) Отображение имени метода ActionMessage на дочерний объект ViewModel - PullRequest
4 голосов
/ 07 июня 2011

Я хотел бы связать свойство имя метода в сообщении действия caliburn.micro с методом на дочернем объекте ViewModel.

Как я мог бы представить, что это должно работать:

<i:Interaction.Triggers>
  <i:EventTrigger EventName="Click">
    <cal:ActionMessage MethodName="MenuItemX.Clicked" />
  </i:EventTrigger>
</i:Interaction.Triggers>

Проблема здесь заключается в том, что имя метода не находится непосредственно в модели представления, но в дочернем объекте модели представления.

Так что в этом случае я хотел бы привязать к: ViewModel.MenuItemX.Clicked ()

В настоящее время существует обходной метод для моей модели представления, который пахнет.

1 Ответ

7 голосов
/ 07 июня 2011

Вы можете установить фактическую цель действия (MenuItemX), используя cal:Action.TargetWithoutContext присоединенное свойство:

<Button cal:Action.TargetWithoutContext="{Binding MenuItemX}" >
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
     <cal:ActionMessage MethodName="Clicked" />
   </i:EventTrigger>
  </i:Interaction.Triggers>
</Button>

или более короткий синтаксис:

<Button cal:Action.TargetWithoutContext="{Binding MenuItemX}" 
   cal:Message.Attach="Clicked" />
...