Я вижу утечку памяти, вызванную обработчиком событий CanExecuteChanged
.Утечка кнопки при использовании ICommand
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
EventHandler привязан к кнопке имеет в своем ViewModel в 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>
Утечки памяти с событиями являются проблемой подписчика - что подписывается на мероприятие? Как бы то ни было, он сохраняет ссылку живым – Charleh
Опубликуйте XAML, где вы привязаны к этому. –
Я обновил сообщение с помощью xaml – user2720165