WPF MVVM ListView仅在项目可见

时间:2017-05-29 08:49:39

标签: c# wpf listview mvvm listviewitem

我有一个包含超过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;
    }

0 个答案:

没有答案