Question

Je ListeEmployes comme ObservableCollection d'objet employé.

L'objet employé a salaire.

Je veux afficher quelques valeurs comme salaire moyen des employés de XAML, et devrait être mis à jour automatiquement le champ de l'interface utilisateur lorsqu'un élément est ajouté à la liste ou lorsque le terrain salaire est modifié dans l'un des éléments mis à jour.

Ceci peut être réalisé en créant une propriété pour moyenne et écouter de la collection et les gestionnaires Changed ProperyChanged dans la liste.

Mais, je suis sûr qu'il devrait y avoir une autre meilleure façon de le faire. (Comme l'utilisation AttachedProperties ou IValueConverter / IMultiValueConverter)

En ce qui concerne ce, je suit des questions.

  1. Est-il possible d'utiliser IMultiValueConverter pour une liste / ObservableCollection des articles? Le convertisseur doit être appelé quand un élément ajouté à la liste ainsi que lorsqu'un bien particulier a changé?
Était-ce utile?

La solution

L'utilisation d'une propriété est sans aucun doute la voie à suivre, en particulier du point de vue MVVM. Pensez Occam Razor . En fait, la solution la plus simple est généralement le meilleur

Il est certainement la solution la plus propre, et donc plus maintenable. De plus, il est le plus extensible (si vous le souhaitez, vous pouvez facilement ajouter de nouvelles propriétés pour les calculs différents).

Tout ce que vous devez faire est de créer des propriétés en lecture seule et appel PropertyChanged avec le nom de cette propriété lorsque la collection change (qui il semble que vous faites).

Par exemple, voici une propriété "moyenne":

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

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

Les propriétés attachées ne fonctionnera pas -. Ils sont pour spécifier la propriété d'un parent dans un élément enfant

ValueConverters travaillerait, en théorie (bien qu'ils devraient probablement être sur chaque élément de la liste, ainsi que la collection), mais vous n'êtes pas vraiment convertir quoi que ce soit, vous fournir des données supplémentaires sur les données existantes . Pour ce faire, vous devez muck autour avec toutes sortes de modèles, et chaque fois que vous avez besoin de quoi que ce soit le changement, vous aurez besoin de muck autour de nouveau avec eux. Il se complexe pressé, et aucun avantage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top