Pregunta

Tengo employeeList como ObservableCollection del objeto Employee.

El objeto empleado tiene salario.

Quiero mostrar unos valores como el salario promedio de los empleados en XAML, y el campo de la interfaz de usuario deben actualizarse automáticamente cuando se añade un elemento a la lista o cuando se cambia de campo Salario en cualquiera de los elementos actualizados.

Esto puede lograrse mediante la creación de una propiedad por medio de recogida y escuchar cambiado y ProperyChanged manipuladores en la lista.

Sin embargo, estoy seguro de que debe haber alguna otra forma mejor de hacer esto. (Al igual que el uso de AttachedProperties o IValueConverter / IMultiValueConverter)

Con respecto a esto, tengo las siguientes preguntas.

  1. ¿Es posible utilizar IMultiValueConverter para una Lista / ObservableCollection de artículos? El convertidor debe ser llamada cuando un elemento añadido a la lista, así como cuando una propiedad particular cambió?
¿Fue útil?

Solución

El uso de una propiedad es definitivamente el camino a seguir, especialmente desde el punto de vista MVVM. Piense Razor Occam :. Básicamente, la solución más sencilla suele ser la mejor

Es sin duda la solución más limpia, y por lo tanto más fácil de mantener. Además, es el más extensible (se puede añadir fácilmente nuevas propiedades para diferentes cálculos si lo desea).

Todo lo que necesita hacer es crear propiedades de sólo lectura, y PropertyChanged llamada con el nombre de esa propiedad cuando cambia la colección (que suena como que está haciendo).

Por ejemplo, aquí está una propiedad "promedio":

public Double Average   
{
    get { return mMyCollection.Average(); }
}

void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}

propiedades adjuntas no funcionará -. Que son para especificar la propiedad de una controladora en un elemento hijo

ValueConverters funcionaría, en teoría (aunque probablemente tendría que estar en cada elemento de la lista, así como la colección completa), pero no estás realmente convertir cualquier cosa, va a proporcionar datos adicionales sobre la base de los datos existentes . Para hacer eso, usted tendría que ensuciar alrededor con todo tipo de plantillas, y cada vez que tenía que cambiar nada, usted necesitará alrededor de lodo con ellos de nuevo. Sería hacerse muy complejos a toda prisa, y sin ningún beneficio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top