¿Alguien puede señalar un ejemplo donde se implementa CollectionChanged. Estoy usando wpf mvvm light. Intenté googlear, no encontré nada lo suficientemente bueno.CollectionChanged muestra
Respuesta
public ObservableCollection<string> Names { get; set; }
public ViewModel()
{
names = new ObservableCollection<string>();
Names.CollectionChanged += this.OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//Get the sender observable collection
ObservableCollection<string> obsSender = sender as ObservableCollection<string>;
List<string> editedOrRemovedItems = new List<string>();
foreach(string newItem in e.NewItems)
{
editedOrRemovedItems.Add(newItem);
}
foreach(string oldItem in e.OldItems)
{
editedOrRemovedItems.Add(oldItem);
}
//Get the action which raised the collection changed event
NotifyCollectionChangedAction action = e.Action;
}
Para obtener más información acerca de los NotifyCollectionChangedEventArgs vistazo here.
EDITAR: Debido a que necesita una lista de elementos añadidos/eliminados, modifiqué el código de muestra.
por alguna razón, el método onCollectionChanged se invoca solo en el caso de agregar o quitar elementos. pero no en el caso de editar el elemento. También me gustaría saber cómo avanzar con esto, me refiero a cómo finalmente enviar la lista/colección de elementos recién agregados, eliminados y editados en una sola colección. Gracias. – WhoIsNinja
Parece que tienes otra pregunta para publicar. –
ObservableCollection no proporciona funciones para llamar a OnCollectionChanged en elementos de edición. Tienes que hacer eso tú mismo. Sus elementos en la colección deben implementar INotifyPropertyChanged y debe agregar detectores de eventos al evento PropertyChanged de INotifyPropertyChanged. Mire http://stackoverflow.com/questions/269073/observablecollection-that-also-monitors-changes-on-the-elements-in-collection para obtener más información. – Arxisos
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
private ObservableCollection<Person> persons = new ObservableCollection<Person>();
public MainWindow()
{
InitializeComponent();
dgPerson.ItemsSource = persons;
persons.CollectionChanged += this.OnCollectionChanged;
}
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//Get the sender observable collection
ObservableCollection<Person> obsSender = sender as ObservableCollection<Person>;
NotifyCollectionChangedAction action = e.Action;
if (action == NotifyCollectionChangedAction.Add)
lblStatus.Content = "New person added";
if (action == NotifyCollectionChangedAction.Remove)
lblStatus.Content = "Person deleted";
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
Person p = new Person();
p.FirstName = txtFname.Text;
p.LastName = txtLname.Text;
persons.Add(p);
}
- 1. Implementando CollectionChanged
- 2. ObservableCollection y CollectionChanged Evento
- 3. EntityFramework EntityCollection Observando CollectionChanged
- 4. ObservableCollection CollectionChanged evento parece no estar disparando, ¿por qué?
- 5. Eliminar un elemento de un ObservableCollection en un controlador de eventos CollectionChanged
- 6. Página que muestra el código de muestra
- 7. EGOTextView muestra
- 8. Si esta página muestra esta otra muestra esta
- 9. IE 7 muestra oculta y no muestra ninguno Elementos
- 10. Rieles form_tag no muestra
- 11. Muestra simple de semáforo
- 12. LogCat muestra Nada
- 13. Firefox muestra imágenes rotas
- 14. Debug.WriteLine muestra nada
- 15. ComboBox SelectedValue no muestra
- 16. Google Maps no muestra
- 17. ggmap no muestra mapas
- 18. jQuery no muestra hebreo
- 19. muestra ExpandableListView de Google
- 20. Fiddler no muestra sesiones
- 21. UIPageControl no se muestra
- 22. UIPickerView muestra títulos incorrectos
- 23. Rosca simple Muestra Delphi
- 24. EditarTexto pista no muestra
- 25. getIntent(). GetStringExtra() muestra nulo
- 26. Aplicaciones de muestra WPF
- 27. html: © no muestra
- 28. FormView no muestra
- 29. autotest muestra en blanco
- 30. Muestra de cinta
Un poco más de detalle, por favor. ¿Que estás tratando de hacer? –
Tengo una cuadrícula de datos con Objetos de colección observable que tiene habilitada la edición en línea, cuando el usuario termina de editar/agregar/eliminar los datos en esta cuadrícula de datos, quiero enviar esos datos al servicio web para su actualización. – WhoIsNinja
No puedo creer que haya aceptado la respuesta de Arxisos a continuación ... el código siguiente no tiene sentido ... ¿Cómo implementar NotifyCollectionChanged y NotifyCollectionChangedEventArgs? Eche un vistazo aquí http://blog.stephencleary.com/2009/07/interpreting-notifycollectionchangedeve.html para una buena descripción breve y también hay enlaces a implementaciones y más detalles. – Beachwalker