2012-02-20 25 views
5

Tôi có trong ViewModel một sự kiện.Sự kiện trong ViewModel với System.Windows.Interactivity.EventTrigger, có tham chiếu yếu không?

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

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

trong chế độ xem của mình, tôi đã sử dụng EventTrigger để nghe Sự kiện để gọi hành động.

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

Nó hoạt động hoàn toàn tốt. Tuy nhiên tôi tò mò nếu có khả năng rò rỉ bộ nhớ? Khi Chế độ xem của tôi được tạo theo yêu cầu, có nghĩa là điều khiển được thêm vào và xóa khỏi cây Visual dựa trên người dùng. Đối tượng nguồn (ViewModel) có thời lượng lâu hơn trình nghe (View). Do đó, bằng cách sử dụng mã trên, sự kiện sẽ vẫn có tham chiếu mạnh mẽ đến trình lắng nghe đã xóa (Chế độ xem) không?

Trả lời

2

Trong OnDetaching của EventTriggerBase, nó gọi đoạn mã sau:

this.OnSourceChanged(this.Source, null); 

Điều này có nghĩa rằng nguồn gốc đang được thiết lập từ Nguồn null và sự kiện này là chưa đăng ký. Không có rò rỉ bộ nhớ khi khung nhìn được nạp đúng cách có nghĩa là phương thức Detach đang được gọi.

Các vấn đề liên quan