在我的代码中,我在加载事件期间将虚拟机上的事件附加到用户控件上的方法,现在我想在卸载用户控件时删除该事件,我该怎么做?
在虚拟机
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
在UnLoaded
处已经是null
。
卸载用户控件时如何删除附加到 VM.Check
的事件?
最佳答案
您可以使用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;
}
}
关于c# - 当用户控件卸载时从 ViewModel 中删除事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45323145/