Windows Phone 8 - утечка памяти вызывает команды интерактивности
В приложении Windows Phone 8 у меня есть ItemsControl
с ItemTemplate
у которых есть событие на кране:
<interactivity:Interaction.Triggers>
<interactivity:EventTrigger EventName="Tap">
<command:EventToCommand Command="{Binding Mode=OneWay, Path=DataContext.NavigateToNextPage, Source={StaticResource Context}}" CommandParameter="{Binding}" />
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>-->
Контекст:
<ContentControl x:Key="Context" Content="{Binding}" />
RelayCommand:
public RelayCommand<MyItem> NavigateToNextPageCommand
{
get { return _navigateToNextPageCommand ?? (_navigateToNextPageCommand = new RelayCommand<MyItem>(NavigateToNextPage)); }
}
ItemsControl определяет:
<ItemsControl Grid.Row="2" ItemsSource="{Binding DepositsItems}">
DepositsItems
это список, который имеет около 200 элементов, и я иногда перезагружаю его. После нескольких перезагрузок у меня возникает утечка памяти и приложение закрывается. Я нашел, почему это происходит. Когда я удаляю событие Tap, все работает. Я думаю, что эта команда содержит ссылку на элемент, а GC не освобождает память.
Есть ли способ "отсоединить" команду от элемента? Я забочусь о модели MVVM.
Я нашел это: https://atomaras.wordpress.com/2012/04/23/solving-mvvmlights-eventtocommand-memory-leak-wp7/ но это не работает. Есть ли более простое решение?
ФИКСИРОВАННЫЙ
Я исправил это, изменив EventToCommand
в InvokeCommandAction
,
1 ответ
Я исправил это, изменив EventToCommand
в InvokeCommandAction.
<interactivity:Interaction.Triggers>
<interactivity:EventTrigger EventName="Tap">
<command:InvokeCommandAction Command="{Binding Mode=OneWay, Path=DataContext.NavigateToNextPage, Source={StaticResource Context}}" CommandParameter="{Binding}" />
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>