Tengo un ObservableCollection y un UserControl de WPF está vinculado a los datos. El Control es un gráfico que muestra una barra vertical para cada elemento de tipo BarData en ObservableCollection.cómo ordenar ObservableCollection
ObservableCollection<BarData>
class BarData
{
public DateTime StartDate {get; set;}
public double MoneySpent {get; set;}
public double TotalMoneySpentTillThisBar {get; set;}
}
Ahora quiero resolver el ObservableCollection basado en StartDate modo que los de BarData estarán en orden creciente de StartDate en la colección. entonces puedo calcular los valores de TotalMoneySpentTillThisBar en cada BarData como este -
var collection = new ObservableCollection<BarData>();
//add few BarData objects to collection
collection.Sort(bar => bar.StartData); // this is ideally the kind of function I was looking for which does not exist
double total = 0.0;
collection.ToList().ForEach(bar => {
bar.TotalMoneySpentTillThisBar = total + bar.MoneySpent;
total = bar.TotalMoneySpentTillThisBar;
}
);
Sé que puedo utilizar ICollectionView para ordenar, filtrar los datos para veiwing pero eso no quiere cambiar la colección real. Necesito ordenar la colección real para poder calcular TotalMoneySpentTillThisBar para cada artículo. Su valor depende del orden de los elementos en la colección.
Gracias.
¿Se trata de una tarea de una sola vez, es decir, algo que se puede hacer antes de que la colección esté ligada al control? –
la colección sigue cambiando incluso cuando está vinculada (esa es la razón por la que estoy usando ObservableCollection para que la UI se actualice si la colección cambia). Una opción para resolver este problema es manejarlo mientras agrego un elemento a la colección para asegurarme de que está insertado en el índice correcto según el orden de clasificación o la segunda opción es ordenar la colección cada vez que se agrega o elimina un elemento. Estoy tratando de evaluar la segunda opción aquí. –
En mi opinión, es un error de diseño que el objeto en sí mismo sepa cuánto dinero se ha gastado hasta ahora y que esta información depende del pedido. Esta debería ser una característica del control de usuario ('ShowTotal = true'). –