icu*_*ube 5 c# events memory-leaks mvvm
我在ViewModel中有一个事件.
public class MyViewModel:ViewModelBase
{
...
public event EventHandler SomethingChanged;
private void FireEvent()
{
if (SomethingChanged != null)
SomethingChanged(this, EventArgs.Empty);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在我的视图中,我使用EventTrigger来监听事件以调用一个动作.
<i:Interaction.Triggers>
<i:EventTrigger EventName="SomethingChanged" SourceObject="{Binding}">
<i:SomeAction/>
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
它工作得很好.但是我很好奇是否存在内存泄漏的可能性?由于我的View是按需创建的,因此意味着根据用户在Visual树中添加和删除控件.源对象(ViewModel)的生命周期比侦听器(View)长.因此,使用上面的代码,事件是否仍然强烈引用已删除的侦听器(View)?
在EventTriggerBase的OnDetaching中,调用了以下代码:
this.OnSourceChanged(this.Source, null);
Run Code Online (Sandbox Code Playgroud)
这意味着源正在从 Source 设置为 null 并且事件已取消订阅。当视图正确卸载时,不会发生内存泄漏,这意味着正在调用 Detach 方法。