2011-12-12 19 views
7

Im tratando de implementar un "cargar más" elementos perezosos cuando el usuario llega al final del cuadro de lista, pero cada vez que intento agregar nuevos elementos al listbox obtengo resultados como esto:Operación no admitida en la colección de solo lectura C# wp7

"El funcionamiento no es compatible con la recopilación de solo lectura".

Ya he intentado varias soluciones desde foros a blogs, parece que ninguna funciona. Ni siquiera puedo entender la lógica detrás del problema que me parece un poco extraño.

Lo que estoy haciendo es básicamente cargar una lista de elementos y asignarlos como el elemento de mi cuadro de lista.

wineFilterListBox.ItemsSource = wines; 

Cuando el usuario llega a la parte inferior de la lista, añadir más elementos (al igual que la aplicación de Twitter para WP7)

public ObservableCollection<Wine> wines; 
... 

    if (atBottom) 
    { 
     int Count = page.wineFilterListBox.Items.Count; 
     int end = Count + 10; 
     for (int i = Count; i < end; i++) 
     { 
      page.LoadWineList(Count); 
     } 
    } 
... 

    private void LoadWineList(int Count = 1) 
    { 
    ... 
     wineFilterListBox.Items.Add(wines); 
    } 

Respuesta

9

Cuando se utiliza ItemSource de sólo lectura se convierte en la colección Items. Parece que tendría que agregar los datos a la colección en lugar de a la propiedad ListBoxItems.

Véase el MSDN: ItemsControl.ItemSource Property

En particular, esta sección:

Cuando la propiedad ItemsSource se establece, se realiza la recogida de artículos de sólo lectura y de tamaño fijo.

Trate de añadir el elemento a la colección wines directamente, ya que su colección es un `ObservableCollection ':

Debe establecer la ItemsSource a un objeto que implementa la interfaz INotifyCollectionChanged de modo que los cambios en el la colección se reflejará en ItemsControl. La clase ObservableCollection (Of T) define dicho objeto.

+0

gracias. Eliminar la última línea lo hizo. "wineFilterListBox.Items.Add (vinos);" Probé tantas soluciones que perdí el básico mientras usaba ObservableCollection. Solo agregar a la lista de vinos fue suficiente para actualizar el listbox. –

+0

@BrunoNunes: ¡No hay problema! Siempre son las pequeñas cosas que nos atrapan :-) –

0

FYI, si no intencionalmente quieren usar ObservableCollection para establecer ItemsSource Puede añadir Wine manualmente a su wineFilterListBox.Items

for (int i = Count; i < 10; i++) 
{ 
    wineFilterListBox.Items.Add(new Wine()); 
} 

Esta causa la wineFilterListBox.Items que no serán de sólo lectura

Cuestiones relacionadas