我在DataTemplate中有一个自定义行为,它会引发一个自定义路由事件。我想用TriggerAction处理该事件(发送消息,调用命令等)。
<Border Background="#01FFFFFF" VerticalAlignment="Center">
<i:Interaction.Behaviors>
<Behaviors:MyBehavior>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MyEvent">
<triggers:SendMessageAction Parameter="ActionTaskAssign" MessageToken="ActionTask" />
</i:CustomEventTrigger>
</i:Interaction.Triggers>
</Behaviors:DropBehavior>
</i:Interaction.Behaviors>
<!-- .... -->
但我可以清楚地说,EventTrigger并没有订阅行为的MyEvent。
我该怎么办?
答案 0 :(得分:1)
问题是EventTrigger没有连接到Behavior的事件。相反,它正在连接到Behavior的AssociatedObject的事件。以下是相关的源代码:
protected override void OnAttached()
{
base.OnAttached();
DependencyObject associatedObject = base.AssociatedObject;
Behavior behavior = associatedObject as Behavior;
FrameworkElement element = associatedObject as FrameworkElement;
this.RegisterSourceChanged();
if (behavior != null)
{
associatedObject = ((IAttachedObject) behavior).AssociatedObject;
behavior.AssociatedObjectChanged += new EventHandler(this.OnBehaviorHostChanged);
}
....
}
此处提出了一个相关问题: Handle MouseDragElementBehavior.Dragging event with void Foo() in VM
我自己解决了这个问题,编写了我自己的自定义行为,它触发了一个命令(我需要这个命令,而不是你的信息。
你可以在答案中看到我的方法: