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
- public MyWindow()
- {
- InitializeComponent();
- ((INotifyCollectionChanged)mListBox.Items).CollectionChanged +=
- mListBox_CollectionChanged;
- }
- private void mListBox_CollectionChanged(object sender,
- NotifyCollectionChangedEventArgs e)
- {
- if (e.Action == NotifyCollectionChangedAction.Add)
- {
- // realizar el scrool hasta el nuevo item
- mListBox.ScrollIntoView(e.NewItems[0]);
- }
- }
No es la manera mas elegante pero me sirvió
Después de unos días en PortAventura gritando como un loco en el Furius Baco (teneis que probarla) os
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 http://msdn.microsoft.com/en-us/magazine/dd252944.aspx
Ah vale. Código de otros, qué divertido ;).
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!!!