【发布时间】:2013-10-16 00:46:13
【问题描述】:
我看到由CanExecuteChanged 事件处理程序引起的内存泄漏。
public class MyCommand : ICommand
{
#region ICommand Members
public virtual bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
protected virtual void OnCanExecuteChanged(EventArgs e)
{
if (CanExecuteChanged != null)
CanExecuteChanged(this, e);
}
public void Execute(object parameter)
{
}
#endregion
}
当我运行 ANTS 内存分析器时,它显示绑定到按钮的 CanExecuteChanged 事件处理程序在我的视图模型中有一个 effectivevalueentry。我的视图模型没有被垃圾回收。
XAML
<Button x:Uid="_editButton" x:Name="_editButton"
Tag="Edit"
Margin="1,1,1,1"
DockPanel.Dock="Left"
Command="{Binding Path=EditCommand}"
CommandParameter="{Binding Path=SelectedItems, ElementName=SearchResultGrid}"
Content="{DynamicResource icoEdit1512Image}"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Visibility="{Binding Path=NewEditDeleteButtonVisibility}"
Localization.Attributes="Tag (Text Modifiable)">
<Button.Style>
<Style x:Uid="Style_2" TargetType="{x:Type Button}"
BasedOn="{StaticResource dataGridToolBarButtonStyle}">
<Style.Triggers>
<DataTrigger x:Uid="DataTrigger_1" Binding="{Binding ElementName=SearchResultGrid,
Path=SelectedItem}"
Value="{x:Null}">
<Setter x:Uid="Setter_3" Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
【问题讨论】:
-
事件的内存泄漏是订阅者的问题 - 什么订阅了事件?不管它是什么,它都会保持引用的活力
-
发布您要绑定到此的 XAML。
-
我已经用 xaml 更新了我的帖子
标签: wpf