0

我想從數據庫列表視圖中顯示10k項目。 我試圖使用IList界面使用可視化。 想法是按照listview的要求逐個提取項目。 (只有可見項目)。 但是,當我創建VirtualComboList對象並將其分配給ListView時,獲得異常。WinRT 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; 
      } 

     } 

回答

0

你有GetEnumerator方法返回null。不要這樣做。 ItemsControl(在這種情況下爲ListView)嘗試使用Enumerator(它是null)導致發生異常來遍歷列表。

你應該看看GetEnumerator的正確實施。或者,您可以將List<string>作爲自定義類的字段/屬性,並簡單地公開底層集合的方法,以便您不必自己實現它們中的任何一個。

+1

是的,GetEnumerator不應該返回null,我的錯。 –