Domanda

Ho employeeList come ObservableCollection di oggetto Employee.

L'oggetto dipendente ha Salario.

Voglio visualizzare alcuni valori come stipendio medio dei dipendenti in XAML, e il campo dell'interfaccia utente dovrebbe essere aggiornato automaticamente quando un elemento viene aggiunto alla lista o Quando il campo Stipendio è cambiato in uno qualsiasi degli elementi aggiornati.

Ciò può essere ottenuto attraverso la creazione di una struttura per la media e l'ascolto di gestori di raccolta cambiato e ProperyChanged nella lista.

Ma, sono sicuro che ci dovrebbe essere qualche altro modo migliore per farlo. (Come l'utilizzo AttachedProperties o IValueConverter / IMultiValueConverter)

Per quanto riguarda questo, ho le seguenti domande.

  1. E 'possibile utilizzare IMultiValueConverter per una lista / ObservableCollection delle voci? Il convertitore deve essere chiamato quando un elemento aggiunto alla lista, così come quando una proprietà particolare cambiato?
È stato utile?

Soluzione

Utilizzo di un immobile è sicuramente la strada da percorrere, soprattutto dal punto di vista MVVM. Pensate di Occam Razor :. In sostanza, la soluzione più semplice è di solito il migliore

E 'certamente la soluzione più pulita, e quindi più gestibile. Inoltre, è il più espandibile (è possibile aggiungere facilmente nuove proprietà per i diversi calcoli, se vuoi).

Tutto quello che devi fare è creare proprietà di sola lettura, e la chiamata PropertyChanged con il nome di quella proprietà quando i cambiamenti di raccolta (che suona come si sta facendo).

Per esempio, ecco una proprietà "Media":

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

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

proprietà associate non funziona -. Sono per specificare proprietà di un genitore in un elemento figlio

ValueConverters avrebbe funzionato, in teoria (anche se probabilmente devono essere su ogni elemento della lista, così come l'intera collezione), ma non sei davvero la conversione di qualsiasi cosa, si sta fornendo dati aggiuntivi sulla base dei dati esistenti . Per fare questo, si avrebbe bisogno di impazzire con tutti i tipi di modelli, e ogni volta che avete bisogno di cambiare nulla, sarà necessario impazzire di nuovo con loro. Si otterrebbe complesso in fretta, e per nessun beneficio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top