在我的代码中,我在加载的事件期间将我的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
的事件?
答案 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;
}
}