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

自古美人都是妖i 提交于 2020-01-02 05:25:25

问题


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.


回答1:


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" />


来源:https://stackoverflow.com/questions/6263039/caliburn-micro-mapping-a-actionmessage-methodname-to-a-child-object-of-the-vie

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!