(Caliburn Micro)将ActionMessage方法名映射到ViewModel的子对象

时间:2011-06-07 09:12:24

标签: silverlight caliburn.micro

我想将caliburn.micro actionmessage的methodname propererty绑定到ViewModel的子对象上的方法。

我怎么想象它应该有效:

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

这里的问题是methodname不直接存在于viewmodel上,而是存在于viewmodel的子对象上。

所以在这种情况下我想绑定到: ViewModel.MenuItemX.Clicked()

当前的解决方法是在我的viewmodel上使用传递方法,它会闻起来。

1 个答案:

答案 0 :(得分:7)

您可以使用cal:Action.TargetWithoutContext附加属性设置操作的实际目标(MenuItemX):

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