WinRT ListView virtualization

本文关键字:virtualization ListView WinRT | 更新日期: 2023-09-27 18:21:19

我想在数据库的列表视图中显示10k个项目。我尝试使用IList接口进行可视化。想法是按照listview的要求,一个接一个地取物品。(仅可见项目)。但当我创建VirtualComboList对象并将其分配给ListView时,会出现以下异常。

Object reference not set to an instance of an object.

类似的代码适用于WP8(Silverlight)。现在,有人能说出我错过了什么吗?

public void initializeList()
{
    int ItemsCount = getItemsCountFromDatabase();
    VirtualComboList list = new VirtualComboList(ItemsCount);
    listBox1.ItemsSource = list; //Exception at this line
}

实现IList接口的My VirtualComboList类

class VirtualComboList : IList<string> 
        {
            int ItemCount;
            public VirtualComboList(int count)
            {
                ItemCount = count;
            }
            public int IndexOf(string item)
            {
                return -1;
            }
            public void Insert(int index, string item)
            {
            }
            public void RemoveAt(int index)
            {
            }
            public string this[int index]
            {
                get
                {
                    return getStringFromDatabaseForIndex(index);
                }
                set
                {
                }
            }
            public void Add(string item)
            {
            }
            public void Clear()
            {
            }
            public bool Contains(string item)
            {
                return false;
            }
            public void CopyTo(string[] array, int arrayIndex)
            {
            }
            public int Count
            {
                get { return ItemCount; }
            }
            public bool IsReadOnly
            {
                get  { return true ; }
            }
            public bool Remove(string item)
            {
                return true;
            }
            public IEnumerator<string> GetEnumerator()
            {
                return null;
            }
            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return null;
            }
        }

WinRT ListView virtualization

GetEnumerator方法返回null。不要那样做。ItemsControl(在本例中为ListView)正试图使用Enumerator(即null)对列表进行迭代,从而导致异常。

您应该研究GetEnumerator的正确实现。或者,您可以将List<string>作为自定义类的字段/属性,并简单地公开底层集合的方法,这样您就不必自己实现它们中的任何一个。