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

sjo*_*urg 4 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>
Run Code Online (Sandbox Code Playgroud)

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

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

目前的解决方法是在我的viewmodel上使用pass-through方法.

Mar*_*ola 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>
Run Code Online (Sandbox Code Playgroud)

或者更短的语法:

<Button cal:Action.TargetWithoutContext="{Binding MenuItemX}" 
   cal:Message.Attach="Clicked" />
Run Code Online (Sandbox Code Playgroud)