2012-02-20 7 views
5

私は自分のViewModelにイベントを持っています。System.Windows.Interactivity.EventTriggerを使用してViewModelのイベントを参照するのは弱いですか?

public class MyViewModel:ViewModelBase 
{ 
    ... 
    public event EventHandler SomethingChanged; 

    private void FireEvent() 
    { 
      if (SomethingChanged != null) 
       SomethingChanged(this, EventArgs.Empty); 
    } 
    ... 
} 

私のビューでは、EventTriggerを使用してイベントをリッスンしてアクションを呼び出しました。

<i:Interaction.Triggers>    
     <i:EventTrigger EventName="SomethingChanged" SourceObject="{Binding}"> 
      <i:SomeAction/> 
     </i:EventTrigger> 
</i:Interaction.Triggers> 

正常に動作します。しかし、メモリリークの可能性があるのであれば私は興味がありますか?私のビューはオンデマンドで作成されるため、コントロールはユーザーに基づいてビジュアルツリーに追加され、削除されます。ソースオブジェクト(ViewModel)は、リスナー(View)よりも寿命が長くなります。したがって、上記のコードを使用すると、引き続き削除されたリスナー(ビュー)への強い参照がイベントにありますか?これは、ソースがNULLに元から設定され、イベントが解除することを意味

this.OnSourceChanged(this.Source, null); 

:EventTriggerBaseのOnDetachingで

答えて

2

、それは次のコードを呼び出します。ビューが正しくアンロードされるとメモリリークは発生しません。これは、Detachメソッドが呼び出されていることを意味します。

関連する問題