Caliburn Message.Attach()抛出“找不到方法的目标”

我有一个列表框,我正在为ItemContainer设置样式以包含上下文菜单。 这是同样的xaml。

  ...         

我在ViewModel中编写了目标方法,如下所示。

 public void DeleteGroup() { //ToDo ... } 

ViewModel被设置为UserControl的DataContext,其中有ListBox。

上面的代码导致“找不到方法的目标” 。 我不确定为什么这不起作用。 我也尝试过以下变化

  

其中UCRelayDispositionView是UserControl的名称。

为什么上面的代码不起作用?

编辑:1还尝试了以下内容

  

还有这个

  

编辑:2我试图在ItemContainer上以下列方式使用Tag,但它也不起作用。

            

编辑3:绑定错误

 System.Windows.Data Error: 40 : BindingExpression path error: 'PlacementTarget' property not found on 'object' ''MenuItem' (Name='')'. BindingExpression:Path=PlacementTarget.Tag; DataItem='MenuItem' (Name=''); target element is 'MenuItem' (Name=''); target property is 'TargetWithoutContext' (type 'Object') System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=UCRelayDispositionView'. BindingExpression:Path=DataContext; DataItem=null; target element is 'ContextMenu' (Name=''); target property is 'Tag' (type 'Object') 

您的问题在于您尝试将目标绑定到同一可视树中不存在的元素,例如,您有一个项目所在的ContextMenu

要正确获取操作目标,您需要使用ContextMenuPlacementTarget属性。

有关XAML,请查看以下有关SO的答案

Caliburn Micro中的WPF上下文菜单

所以下面的XAML应该工作:

  

这应该在ContextMenu上查找PlacementTarget ,并将操作的目标设置为PlacementTarget.Tag (应该是ListBoxItem )的值。

如果你将ListBoxItem.Tag (你已经完成)设置为父容器( ListBox )的DataContext你应该没问题

所以标签绑定应该是:

  

例如,整个事情应该是: