2011-06-07 7 views
7

estoy usando ListBox con ItemsSource personalizado:¿La manera más simple de actualizar ListBox con ItemsSource personalizado?

this.ListOfPersonsListBox.ItemsSource = (List<Person>)ListOfPersons.AllPersons; 

ListOfPersons es una clase estática para que no pueda aplicar INotifyPropertyChanged ni IObservableCollection.

¿Cuál es la forma más sencilla de volver a dibujar mi ListBox después de actualizar la lista? Mi código actual funciona, pero me gustaría encontrar una solución más limpia:

private void SyncButton_Click(object sender, EventArgs e) 
    { 
     ListOfPersons.Sync(); 
     this.ListOfPersonsListBox.ItemsSource = null; 
     this.ListOfPersonsListBox.ItemsSource = ListOfPersons.AllPersons; 
    } 
+0

¿Puedes aclarar por qué ListOfPersons necesita ser una clase estática? Si solo se trata de un acceso conveniente entre varias páginas, considere convertirlo en una propiedad para toda la aplicación. Entonces podría usar un ObservableCollection como keyboardP mencionado. –

+0

@JoshEarl ¿podría explicar qué quiere decir con "propiedad en toda la aplicación"? Soy un principiante y nunca he oído hablar de eso ... –

Respuesta

8

considerar el uso de un ObservableCollection en lugar de un List. Implementa INotifyPropertyChanged internamente. Puede recorrer su lista y agregar cada elemento a un nuevo objeto ObservableCollection y vincular esto al ListBox.

Si se va a convertir a menudo, sólo podría crear una Shaeak Extension method

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> myList) 
{ 
    var oc = new ObservableCollection<T>(); 
    foreach (var item in myList) 
     oc.Add(item); 
    return oc; 
} 
+0

Puede crear un 'ObservableCollection' directamente de una lista. 'var oc = new ObservableCollection (ListOfPersons.AllPersons);' – ChrisF

+2

@ChrisF - No hay sobrecarga para 'ObservableCollection (Lista )' en Silverlight en WP7. Podría estar disponible en Mango ya que ejecuta SL4. – keyboardP

+0

Ah sí, es algo de SL4. – ChrisF

1

,

La clase Application vive durante la duración del ciclo de vida de aplicaciones. Si tiene algo que debe ser accesible desde varias páginas a lo largo de la vida de la aplicación, una solución es crear una clase parcial que hereda de Application y crear una propiedad en esta clase parcial.

This article tiene una explicación de dos tercios del camino hacia abajo de la página.

Cuestiones relacionadas