Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 403
Sjors Miltenburg Avatar asked Jun 07 '11 09:06

Sjors Miltenburg


1 Answers

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" />
like image 194
Marco Amendola Avatar answered Oct 09 '22 11:10

Marco Amendola