2012-04-25 14 views
4

カスタムルーティングイベントを発生させるDataTemplate内にカスタムビヘイビアがあります。私はそのイベントをTriggerAction(メッセージの送信、コマンドの呼び出しなど)で処理したい。Interactivity.EventTriggerがカスタムルーティングイベントを購読していません

<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に加入されていない、伝えることができます。 、

  • は、私は(見here)結合からSourceObjectを設定しようとしましたが、バインディングのElementNameが動作するようには思えないし、どちらも私はEventTriggerから継承し、コードでSourceObjectを設定しようとしましたFindAncestor
  • ません私が得たすべては、私は、カスタムEventTriggerを書いてみましたが、私は(すべての地獄の休憩緩い場合は、私がする)すべてのカスタムイベントのための1つを書くか、私は非処理するための汎用的な方法を把握する必要がありStackOverflowExceptionが
  • ました-generic RoutedEventHandler s ...

どうすればよいですか?

答えて

1

問題は、EventTriggerがビヘイビアのイベントに接続しないことです。代わりに、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

私は、コマンドをオフ発射自分のカスタム動作を書き込むことでこれを自分で解決(そのI

私のアプローチはここの答えで見ることができます:

Custom behavior with command

関連する問題