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;
}
}
GetEnumerator
方法返回null
。不要那样做。ItemsControl
(在本例中为ListView
)正试图使用Enumerator
(即null
)对列表进行迭代,从而导致异常。
您应该研究GetEnumerator
的正确实现。或者,您可以将List<string>
作为自定义类的字段/属性,并简单地公开底层集合的方法,这样您就不必自己实现它们中的任何一个。