¿Cómo puedo hacer eso? Necesito una lista (del tipo ObservableCollection
) donde el último elemento es el primero.¿Cómo insertar un elemento al comienzo de una ObservableCollection?
Respuesta
Intente utilizar
collection.Insert(0, item);
Esto sería añadir el artículo al principio de la colección (mientras Add añade al final). Más información here.
Debería usar una pila en su lugar.
Esto se basa en Observable Stack and Queue
Crear una pila observable, donde la pila siempre es el último en la primera en salir (LIFO).
de Sascha Holl
public class ObservableStack<T> : Stack<T>, INotifyCollectionChanged, INotifyPropertyChanged
{
public ObservableStack()
{
}
public ObservableStack(IEnumerable<T> collection)
{
foreach (var item in collection)
base.Push(item);
}
public ObservableStack(List<T> list)
{
foreach (var item in list)
base.Push(item);
}
public new virtual void Clear()
{
base.Clear();
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
public new virtual T Pop()
{
var item = base.Pop();
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item));
return item;
}
public new virtual void Push(T item)
{
base.Push(item);
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
}
public virtual event NotifyCollectionChangedEventHandler CollectionChanged;
protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
this.RaiseCollectionChanged(e);
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
this.RaisePropertyChanged(e);
}
protected virtual event PropertyChangedEventHandler PropertyChanged;
private void RaiseCollectionChanged(NotifyCollectionChangedEventArgs e)
{
if (this.CollectionChanged != null)
this.CollectionChanged(this, e);
}
private void RaisePropertyChanged(PropertyChangedEventArgs e)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, e);
}
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { this.PropertyChanged += value; }
remove { this.PropertyChanged -= value; }
}
}
Esto exige INotifyCollectionChanged, hace lo mismo que un ObservableCollection, pero de una manera pila.
¿Por qué necesita una pila? ¿No puede sencillamente '.Insertar (0, elemento)' cualquier elemento nuevo al principio de la lista? – ANeves
@ANeves, porque la inserción mencionada se realiza en el tiempo O (n), por lo que puede ser una inserción costosa. – mslot
@mslot si ese es el motivo, debería estar en la respuesta. – ANeves
puede probar esta
collection.insert(0,collection.ElementAt(collection.Count - 1));
- 1. Cómo insertar una palabra/texto al comienzo de cada línea
- 2. Insertar cadena al comienzo de otra cadena
- 3. javascript presionando elemento al comienzo de una matriz
- 4. Java: utilizar StringBuilder para insertar al comienzo
- 5. Agregar un elemento al comienzo de una matriz sin cambiar otras teclas de matriz
- 6. Insertar un elemento en una colección backbone.js
- 7. Cómo detectar si un elemento en mi ObservableCollection ha cambiado
- 8. Cómo agregar un elemento al comienzo de la lista <T>?
- 9. Insertar texto de un archivo al comienzo de otro archivo - bash
- 10. C#: Antecedente al comienzo de un archivo
- 11. elemento de extracción e insertar un espacio
- 12. Cómo insertar un elemento textNode javascript en una nueva línea
- 13. cómo insertar un elemento asociativo en una matriz en javascript?
- 14. insertar un elemento en una posición específica de un vector
- 15. ¿Cómo puedo vincular una ObservableCollection de ViewModels a un MenuItem?
- 16. ¿Cuál es la manera más fácil de empujar un elemento al comienzo de la matriz?
- 17. Cómo configurar vim para no poner comentarios al comienzo de las líneas al editar archivos python
- 18. Insertar un elemento en un Tuple
- 19. ¿Escape an & (ampersand) al comienzo de una entrada de YAML?
- 20. Escribiendo al comienzo de un archivo de texto Java
- 21. Insertar un elemento de igual valor
- 22. Línea de anteponer al comienzo de un archivo
- 23. ¿Cómo insertar un elemento duplicado en un vector?
- 24. XMLSerialize un ObservableCollection
- 25. Cómo insertar un nuevo elemento en un IEnumerable
- 26. Emacs Lisp: ¿cómo evitar insertar un elemento de lista duplicado?
- 27. Cómo insertar un elemento después de la posición del iterador
- 28. cómo ordenar ObservableCollection
- 29. Coincidencia de patrones al comienzo de una cadena en f #
- 30. Recortar los ceros al comienzo de una cadena usando PHP
¿Necesita su colección para ser observables de lo contrario una pila está diseñada para este fin. –