(Caliburn Micro) Mapping a ActionMessage Methodname to a Child Object of the ViewModel
Asked Answered
S

1

5

I would like to bind the methodname propererty of the caliburn.micro actionmessage to a method on a child object of the ViewModel.

How I would imagine it should work:

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

The problem here is that the methodname does not live directly on the viewmodel, but on a childobject of the viewmodel.

So in this case I would like to bind to: ViewModel.MenuItemX.Clicked()

Current workaround is having a pass-through method on my viewmodel which smells.

Strickle answered 7/6, 2011 at 9:12 Comment(0)
K
9

You can set the actual target of the action (MenuItemX) using cal:Action.TargetWithoutContext attached property:

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

or the shorter syntax:

<Button cal:Action.TargetWithoutContext="{Binding MenuItemX}" 
   cal:Message.Attach="Clicked" />
Knesset answered 7/6, 2011 at 10:24 Comment(2)
How can I use it with the CM's AppBarButton on WP7? Compiler says the property is not attachable to the AppBarButton.Abrupt
CM's WP7 version has a special AppBarButton supporting the same syntax.Knesset

© 2022 - 2024 — McMap. All rights reserved.