【发布时间】:2017-12-16 06:16:56
【问题描述】:
我有一个引用 UserControl 的表单
<Label Grid.Row="1" Grid.Column="2" >Item Category</Label>
<PO:ItemCategorySelector Grid.Row="1" Grid.Column="3" x:Name="usrItemCategoryId" SelectedValueChanged="usrItemCategoryId_SelectedValueChanged"
IsOptional="True" Width="250" />
事件定义如下:
#region events
public delegate void SelectedValueChangedDelegate(object sender, SelectedValueChangedEventArgs e);
protected event SelectedValueChangedDelegate _SelectedValueChanged;
public event SelectedValueChangedDelegate SelectedValueChanged
{
add
{
if (this._SelectedValueChanged == null)
this._SelectedValueChanged += value;
}
remove
{
if (this._SelectedValueChanged != null)
this._SelectedValueChanged -= value;
}
}
protected void RaiseSelectedValueChanged(modItemCategory pItemCategory)
{
if (this._SelectedValueChanged != null)
{
var evt = new SelectedValueChangedEventArgs(pItemCategory);
this._SelectedValueChanged(this, evt);
}
}
结束区域
我在事件的 Add 和 Remove 属性上设置了断点。 当表单加载时添加属性触发器。 当我关闭表单时,删除属性永远不会触发。 这一定会导致我发现的内存泄漏。 当然,如果在 XAML 中定义了一个控件并且它链接到事件处理程序中,它应该负责删除该处理程序吗?如果不是,您将如何着手删除它?
我错过了什么?
【问题讨论】: