Bueno hace rato no genero contenido en el blog, años se podría decir y tengo ganas de compartir un código que les va a permitir evitar reescribir código.
En el primer método no hay mucha ciencia y es relativamente fácil.
Se pasa la lista yo utilice ObservableCollection, porque tiene algunas propiedades interesantes mas cuando estamos trabajando con datos enlazados.
public virtual bool Agregar_Collection(ObservableCollection<Object> lista, Object t)
{
try
{
lista.Add(t);
return true;
}
catch (Exception)
{
return false;
}
}
En este método ya se complica un poco más el panorama, se pasa la lista del tipo que quieran, se pasa el objeto a eliminar, como ven no estoy usando un nombre muy descriptivo pero bueno no hagas lo que yo hago usa un nombre más descriptivo, por ultimo ingresa el nombre de la propiedad con la que queremos comparar, yo uso una podrían ser más de una.
No voy a entrar en detalles pero para hacer esto usamos reflexión, con GetProperties() obtenemos una colección de PropertyInfo, la genial ayuda de los amigo de Microsoft de mas esta decir que detesto esa página siempre en vez de ayudarme me complica la vida con 1000 boludeces mas pero bueno va en gustos, dice lo siguiente (Detecta los atributos de una propiedad y proporciona acceso a sus metadatos) está bastante claro, pero igual es mejor entrar al foro que es excelente o blog para ver algún ejemplo o tener más información.
No explique que hace busca la propiedad en la clase la encuentra, y después con getValue obtenemos el valor, yo como siempre uso esto para tipos de datos int32 hago directamente pero si la propiedad no es de ese tipo dará un error más adelante voy a subir un ejemplo de cómo terminar este método para que funcione para cualquier tipo, pero ahora no hay ganas.
El proceso que hacemos con el objeto t, después lo hacemos en la lista y comparamos el valor en caso de ser iguales, lo elimina y corta el bucle.
public virtual bool Eliminar_Collection(ObservableCollection<Object> lista, Object t,
String nombrePropiedad)
{
try
{
PropertyInfo primaryKey_t = t.GetType().GetProperties().
FirstOrDefault(c => c.Name.Equals(nombrePropiedad));
Int32 valoridt = (int)primaryKey_t.GetValue(t, null);
for (int i = lista.Count - 1; i > -1; i--)
{
Object objetoLista = (Object)lista[i];
PropertyInfo primaryKey_objetoLista = objetoLista.GetType().
GetProperties().FirstOrDefault(c => c.Name.Equals(nombrePropiedad));
Int32 valoridobjetoLista = (int)primaryKey_objetoLista.
GetValue(objetoLista, null);
if (valoridobjetoLista == valoridt)
{
lista.Remove(objetoLista);
break;
}
}
return true;
}
catch (Exception)
{
return false;
}
}
Es muy similar a eliminar, cambia una cosa, que cuando encuentra el igual saca el objeto de la lista, pero después agrega el objeto modificado en la posición I, esto se puede hacer de varias maneras si algún purista ve esto me dirá que se podría reemplazar los valores, pero para mí implica un costo extra de recursos, como siempre digo esto no es para que hagan las cosas como yo sino para que tengan una idea de cómo un simple mortal soluciono un problema, que tiene múltiples soluciones.
public virtual bool Modificar_Collection(ObservableCollection<Object> lista,
Object modificado, String nombrePropiedad)
{
try
{
PropertyInfo primaryKey_t = modificado.GetType().GetProperties().
FirstOrDefault(c => c.Name.Equals(nombrePropiedad));
Int32 valoridt = (int)primaryKey_t.GetValue(modificado, null);
for (int i = lista.Count - 1; i > -1; i--)
{
Object objetoLista = (Object)lista[i];
PropertyInfo primaryKey_objetoLista = objetoLista.GetType().
GetProperties().FirstOrDefault(c => c.Name.Equals(nombrePropiedad));
Int32 valoridobjetoLista = (int)primaryKey_objetoLista.
GetValue(objetoLista, null);
if (valoridobjetoLista == valoridt)
{
lista.Remove(objetoLista);
lista.Insert(i,modificado);
break;
}
}
return true;
}
catch (Exception)
{
return false;
}
}
Ahora si me despido, espero que el código sirva saludos.