0

Я хочу отображать 10 тыс. Элементов в виде списка из базы данных. Я попытался использовать визуализацию с использованием интерфейса IList. Идея состояла в том, чтобы извлекать элементы по одному, как запрошено списком. (Только видимые элементы). Но получаю следующее исключение, когда создаю объект VirtualComboList и назначаю его ListView.WinRT ListView virtualization

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, моя ошибка. –

Смежные вопросы