Después de investigar en diversos repositorios y páginas de internet al final nos encontramos con la respuesta que te enseñamos a continuación.
Solución:
Si su objeto dentro de la Lista admite el INotifyPropertyChanged
evento y reemplazas el List
por un BindingList
puedes suscribirte a la ListChanged
evento de BindingList para informarse sobre cualquier cambio realizado por el usuario.
Si está vinculado a un conjunto de datos, tiene suerte: tiene una propiedad HasChanges. Puede obtener los cambios reales llamando a GetChanges en el conjunto de datos. Esto devuelve un nuevo conjunto de datos que contiene una copia de todas las filas modificadas
Después de probar cosas diferentes, terminé con este fragmento de código:
private MyClass currentItem = null;
private bool itemDirty = false; // can be used for "do you want to save?"
private void bindingSource_CurrentChanged(object sender, EventArgs e)
var handler = new PropertyChangedEventHandler((s, e2) => itemDirty = true);
var crnt = currentItem as INotifyPropertyChanged;
if(crnt != null) crnt.PropertyChanged -= handler;
currentItem = (MyClass)bindingSource.Current;
crnt = currentItem as INotifyPropertyChanged;
if(crnt != null) crnt.PropertyChanged += handler;
itemDirty = false;
Funciona bien para mí, aunque guardo mucha información de estado en los campos de instancia de Windows Forms. Sin embargo, jugando con CurrentChanged
y CurrentItemChanged
no me ayudó
valoraciones y comentarios
Recuerda que puedes permitirte valorar esta crónica si te ayudó.