我有一个包含超过100k元素的巨大的observablecollection列表。 为了表示所有这些元素,我将这个observable绑定到listview,使用转换器创建每个元素的图形表示。 当我展示所有这些元素时,我的内存耗尽。
有没有办法仅在显示的项目上调用转换器,以便仅为这些元素分配内存?
XAML
...
<ListView Grid.Row="1" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Path=NodEntitiesList, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource ConvertToItemElement},
IsAsync=True}"
Height="400">
</ListView>
...
CONVERTER CS
public object ConvertToItemElement(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
ObservableCollection<ItemVisualizer> obsIV = new ObservableCollection<ItemVisualizer>();
// elemList is a list of line and data that could be visualized using an itemVisualizer
foreach (elemList currElem in (ObservableCollection<elemList>)value)
{
ItemVisualizer tmp = new ItemVisualizer();
tmp.Width = 100;
tmp.Height = 100;
currElem.Draw(ref tmp);
obsIV.Add(tmp);
}
ListCollectionView ret = new ListCollectionView((ObservableCollection<ItemVisualizer>)obsIV);
return ret;
}