Pregunta

Tengo una instancia de ObservableCollection vinculada a un cuadro de lista WPF con dos plantillas de datos separadas (una para mostrar, una para editar). La plantilla de datos para editar tiene un enlace unidireccional en el cuadro de texto y un botón Guardar.

¿Qué cambios necesito hacer para que cuando presione el botón Guardar (después de poner el elemento de la lista en modo de edición), el valor que cambio el cuadro de texto reemplace el valor en la Colección Observable (y la pantalla)?

¿Fue útil?

Solución

Los elementos de su colección deben ser del tipo que implemente la interfaz INotifyPropertyChanged. De esta forma, se notificará a su cuadro de lista que el valor de la propiedad en su objeto de elemento único ha cambiado. ObservableCollection genera el evento CollectionChanged solo cuando la colección cambia (elementos agregados, eliminados, etc.)

Cita del artículo de la biblioteca de MSDN sobre ObservableCollection

  

Para admitir completamente la transferencia de datos   valores de vincular objetos de origen a   objetivos vinculantes, cada objeto en su   colección que admite bindable   las propiedades deben implementar un   propiedad apropiada cambiada   mecanismo de notificación como el   Interfaz INotifyPropertyChanged.

Otros consejos

Para que se produzca una notificación de cambio en un enlace entre un cliente vinculado y una fuente de datos, su tipo vinculado debe:

  • Implemente INotifyPropertyChanged interfaz (preferido).
  • Proporcione un evento de cambio para cada propiedad del tipo enlazado.

No hagas ambas cosas.

Fuente: MSDN: Interfaz INotifyPropertyChanged

He resuelto un problema similar usando BindingList < T > clase.

Tiene un evento ListChanged activado tanto en la colección como en el cambio de elementos individuales.

Introducido en .Net 3.5

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top