簡體   English   中英

WinRT ListView虛擬化

[英]WinRT ListView virtualization

我想在數據庫的列表視圖中顯示1萬個項目。 我嘗試通過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
}

我的VirtualComboList類實現IList接口

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遍歷列表,該Enumeratornull ,從而導致異常。

您應該研究GetEnumerator的正確實現。 或者,您可以將List<string>作為自定義類的字段/屬性,並只需公開基礎集合的方法,這樣您就不必自己實現它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM