卸载用户控件时从ViewModel中删除事件

时间:2017-07-26 09:41:02

标签: c# wpf events

在我的代码中,我在加载的事件期间将我的VM上的事件附加到用户控件的方法,现在我想在卸载用户控件时删除事件,我该怎么办?

在VM

public delegate bool CheckCondition();
public class VMClass
{
     event CheckCondition Check;
}
用户控制

public partial class AControl:UserControl
{
   public AControl()
   {
       InitializeComponent();
    Loaded += (s, e) =>
           VM.Check +=() => CheckingCode();
   }
   public VMClass VM => (VMClass)DataContext;
}

我正在考虑使用UnLoaded事件,但问题是在UnLoaded事件中,DataContext已经为null,因此我无法取消订阅该事件,即:

   UnLoaded +=(s, e) =>
               VM.Check -=() => CheckingCode(); 

不起作用,因为VM已经是null UnLoaded

如何在卸载用户控件时删除附加到VM.Check的事件?

1 个答案:

答案 0 :(得分:1)

您可以使用DataContextChanged活动。

DataContextChanged += (object sender, DependencyPropertyChangedEventArgs e) =>
{
    var oldVM = e.OldValue as VMClass;
    var newVM = e.NewValue as VMClass;

    if (oldVM != null)
    {
        oldVM.Check -= CheckingCode;
    }

    if (newVM != null)
    {
        newVM.Check += CheckingCode;
    }
}