2012-03-02 19 views
13

he hecho esta pregunta en los foros de MSDN, así ... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80por qué no BindingList en WPF

que tienen que saber que por qué Microsoft sugiere que BindingList no es adecuadamente apoyado en WPF ...

¿Qué es eso que no funciona con BindingList en WPF? Lo encuentro bastante útil como es. Hasta ahora, personalmente, no he encontrado BindingList más lento o tener más carga en la memoria.

Plus WPF ItemsControls, ItemsTemplates, Styles, Hierarchies trabajo muy bien con BindingList demasiado. Ellos son igualmente observables.

ser un desarrollador de hardcore WPF mí mismo y un ventilador ObservableCollection, mi fe está siendo sacudida por un estado-no-hecho-que BindingList ....

Por qué debería utilizar ObservableCollection sobre BindingList? (manteniendo un lado INotifyPropertyChanged la que ambos tienen que implementar los cambios de propiedad elemento)

+0

duplicado Posible de http://stackoverflow.com/questions/4284663/difference-between-observablecollection-and-bindinglist –

+2

@Leom, ese hilo también doesnt responder a la pregunta como en lo que está mal con 'BindingList'? –

+2

ObservableCollection ya notifica cuando se agrega o quita un elemento. No es necesario implementar INotifyPropertyChanged. – dcarneiro

Respuesta

16

Esto puede ser de interés:

http://www.themissingdocs.net/wordpress/?p=465

párrafos más importantes:

Pero la aplicación no escala , es lento, funciona terriblemente con listas más grandes. Si su tipo de elemento es compatible con INotifyPropertyChanged, cada vez que uno de esos elementos aumenta la propiedad se cambia el evento, se recorre toda la lista para calcular el índice en la lista del elemento que generó el evento. Estaba en estado de shock cuando me di cuenta por primera vez. Verá que BindingList es realmente una envoltura más bien delgada que Collection, por lo que no hay metadatos asociados con cada entrada, toda la vinculación del elemento PropertyChanged se dirige a un único controlador, y todo lo que recibe es la fuente y el nombre de la propiedad modificada, por lo que no hay forma de incluir el parámetro NewIndex en ListChangedEventArgs sin realizar una búsqueda. (De forma predeterminada, esta búsqueda incluso utiliza el comparador de objetos predeterminado, por lo que si tiene dos objetos diferentes pero a veces iguales en la lista, disfrute de los resultados ...)

Otra nota al margen - AddNew, la otra característica que BindingList tiene La colección no lo hace, tampoco tiene escala. Tiene que usar IndexOf para averiguar en qué parte de la lista terminó el elemento recién agregado en caso de que necesite cancelar el agregado, ya que admite la ordenación automática en los tipos derivados. (BindingList no admite la clasificación automática en sí ...)

+0

¡Impresionante! ¡Thx un tonn! Esto es lo que quería saber ... ¡las notificaciones de cambio de elemento en cascada!Mi fe es recuperada. :-) –

+12

El título para la entrada vinculada es "BindingList Does Not Scale". Interesante, pero léalo cuidadosamente: solo en las secciones de comentarios, descubre que la aplicación del autor es inusual, ya que quiere mostrar un gran número de actualizaciones en tiempo real en su UI. Es poco probable que sea un problema en un escenario de IU más común. –

+1

Por lo tanto, es seguro decir que la lista de enlaces funciona bien en el 99% de las aplicaciones wpf – MegaMind

Cuestiones relacionadas