我有一个Windows商店应用程序,它使用带有可观察集合的项目源的ListView。我也在其中使用绑定,行为和命令。
我定期刷新商品来源。我的问题是,它似乎在泄漏。我怀疑它与Listview有关,因为当我删除它时,内存是稳定的。此外,我检查过,似乎正在处理和重新创建集合。
我该如何解决这个问题?
谢谢
编辑:
只需添加其他信息。我的代码是这样的:
ObservableCollection<MyViewModel> myViewModels = new ObservableCollection<MyViewModel>();
MyViewModel是一个已经继承 INotifyPropertyChanged 的类。
然后我在ListView中使用它,如下所示:
<ListView Grid.Row="1"
ItemTemplateSelector="{StaticResource MyButtonStyleSelector}"
ItemsSource="{Binding Path=myViewModels}">
<ListView.ItemContainerStyle>
<Style BasedOn="{StaticResource Style_SelectorItem_Chromeless}" TargetType="ListViewItem">
<Setter Property="Margin" Value="4" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid MaximumRowsOrColumns="4" Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
使用MyButtonStyleSelector选择一个ItemTemplate再次绑定到myViewModels的其他属性(例如标题,描述),并绑定到 RelayCommand 和行为。
编辑2:
刷新数据时,我在MyViewModel上有一个Clear()操作,它将其所有子属性设置为null,并将myViewModels集合设置为null。但是,当我检入VS Profiler时,似乎MenuItemViewModel没有得到正确的垃圾收集(我没有在负项目数的项目中看到它们)。这是因为它仍在ListView中引用吗?
编辑3: