Como detectar que se ha modificado los items de un ItemsControl - Blog de Oskar Alvarez

Como detectar que se ha modificado los items de un ItemsControl

Después de unos días en PortAventura gritando como un loco en el Furius Baco (teneis que probarla) os cuento un problema que me surgió, tenia que detectar cuando había sido añadido o eliminado items de un ItemsControl, en este caso una ListBox, estos items podían ser añadidos y eliminados sin mi control solo cambiaba la colección. Supuse que seria bastante fácil, que estaría el  evento CollectionChanged pero cuando me puse a mirar me lleve la decepción que no estaba, no me creía que no estuviese así que me dedique a mirar mas a fondo y vi que estaba pero no estaba explícitamente implementado ya que INotifyCollectionChanged que es la que contiene este manejador no esta implementado explícitamente.

La manera de solucionarlo, con un casting

  1. public MyWindow()  
  2. {  
  3.     InitializeComponent();  
  4.       
  5.     ((INotifyCollectionChanged)mListBox.Items).CollectionChanged +=  
  6.         mListBox_CollectionChanged;  
  7. }  
  8.   
  9. private void mListBox_CollectionChanged(object sender,    
  10.     NotifyCollectionChangedEventArgs e)  
  11. {  
  12.     if (e.Action == NotifyCollectionChangedAction.Add)  
  13.     {  
  14.         // realizar el scrool hasta el nuevo item  
  15.         mListBox.ScrollIntoView(e.NewItems[0]);  
  16.     }      
  17. }    

No es la manera mas elegante pero me sirvió

Published 30/9/2009 15:47 por Oskar Alvarez
Archivado en:
Comparte este post:
http://geeks.ms/blogs/oalvarez/archive/2009/09/30/como-detectar-que-se-ha-modificado-los-items-de-un-itemscontrol.aspx

Comentarios

# Como detectar que se ha modificado los items de un ItemsControl

Después de unos días en PortAventura gritando como un loco en el Furius Baco (teneis que probarla) os

Wednesday, September 30, 2009 4:36 PM por .NET con oskar

# re: Como detectar que se ha modificado los items de un ItemsControl

Hola Kenrae, en efecto la solución mejor hubiera sido haber utilizado una ObservableCollection y haber utilizado el evento CollectionChanged, pero no lo habia programado yo y fue imposible convencer al cliente de hacerlo asi porque la lista la cogia de un webservice y no queria hacer la transformación a ObservableCollection.

Para aquellos que quieran profundizar en como se haria con ObservableCollection les recomiendo este articulo msdn.microsoft.com/.../dd252944.aspx

Thursday, October 01, 2009 8:50 AM por Oskar Alvarez

# re: Como detectar que se ha modificado los items de un ItemsControl

Ah vale. Código de otros, qué divertido ;).

Thursday, October 01, 2009 9:30 AM por Kenrae

# re: Como detectar que se ha modificado los items de un ItemsControl

La verdad es lo que menos me gusta que me pregunten una solución y no me dejen adoptar la que yo quiero. Entonces para que preguntas!!!

Friday, October 02, 2009 7:31 AM por Oskar Alvarez