Non capisco le varie modalità di associazione dati in WPF, come ad esempio:
- Senso Unico
- A due vie
- Una volta
- eccetera...
Cosa significa ciascuna di queste modalità?
Quando dovrebbero essere usati?
Risposte:
OneWay
: Utilizzare questa opzione quando si desidera che la proprietà associata aggiorni l'interfaccia utente.TwoWay
: Ha lo stesso comportamento di OneWay
e OneWayToSource
combinato. La proprietà associata aggiornerà l'interfaccia utente e le modifiche nell'interfaccia utente aggiorneranno la proprietà associata (la useresti con a TextBox
o a Checkbox
per esempio).OneTime
: Ha lo stesso comportamento OneWay
tranne che aggiornerà l'interfaccia utente solo una volta. Questa dovrebbe essere la tua scelta predefinita per l'associazione (per vari motivi non approfondirò qui), dovresti usare altri tipi di associazioni solo se hai effettivamente bisogno della funzionalità extra.OneWayToSource
: Questo è l'opposto di OneWay
: le modifiche al valore dell'interfaccia utente aggiornano la proprietà associata.Se non specifichi nulla, il comportamento dipenderà dal controllo che stai utilizzando.
Per altre informazioni, vedere BindingMode
enum su MSDN .
Un'associazione è composta da due entità:
La destinazione deve essere a DependencyObject
(affinché il binding funzioni) e l'origine può essere a DependencyObject
oppure dovrebbe avere un meccanismo per imitare il sistema di binding di WPF a causa della sua modifica ( INotifyPropetyChnaged
interfaccia di implementazione ).
MVVM consiglia al progetto ViewModel di essere libero da qualsiasi riferimento correlato alla visualizzazione e quindi si consiglia di utilizzare l' INotifyPropertyChanged
interfaccia per fare in modo che l'oggetto Source venga ascoltato dall'associazione WPF. Il legame avviene tra una proprietà di Source e una proprietà di Target (deve essere a DependencyProperty
). ad esempio, il valore TextProperty
della TextBox
classe è DataBound per (dire) la UserName
proprietà del modello di visualizzazione. L'associazione WPF offre quattro tipi di associazione. Ricorda, il binding viene eseguito sul thread dell'interfaccia utente, a meno che non venga specificato diversamente per l'esecuzione.
UserName
proprietà di ViewwModel , si rifletterà nella casella di testo. Questo ha un costo intermedio poiché il sistema di associazione controlla solo la fonte per i cambiamenti.TextProperty
che la UserName
proprietà rimarranno sincronizzati e si aggiorneranno a vicenda se uno cambia. Questo è molto costoso in quanto il sistema di rilegatura deve guardare entrambe le parti per il cambiamento.TextProperty
, la UserName
proprietà assumerà il valore modificato. Anche questo ha un costo intermedio poiché il sistema di rilegatura controlla solo Target per i cambiamenti.Label
, TextBlock
ecc.Se non si menziona nulla, ogni proprietà di destinazione ha una modalità di associazione predefinita associata a se stessa. Ad esempio, il TextProperty
di a TextBox
ha la modalità di associazione predefinita come TwoWay
. Per il TextProperty
di un TextBlock
è un modo.
È consigliabile scegliere la modalità corretta in quanto può aiutarti a ridurre la latenza dell'applicazione, specialmente nei casi in cui hai un numero elevato di controlli nella tua interfaccia utente.
Per ulteriori informazioni su MVVM ecco un articolo scritto da me.