Quali sono le varie modalità di associazione di WPF?


89

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:


162
  • OneWay: Utilizzare questa opzione quando si desidera che la proprietà associata aggiorni l'interfaccia utente.
  • TwoWay: Ha lo stesso comportamento di OneWaye OneWayToSourcecombinato. La proprietà associata aggiornerà l'interfaccia utente e le modifiche nell'interfaccia utente aggiorneranno la proprietà associata (la useresti con a TextBoxo a Checkboxper esempio).
  • OneTime: Ha lo stesso comportamento OneWaytranne 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 BindingModeenum su MSDN .


Grazie. è utile ... Ma per favore specifica l'esempio TwoWay ... voglio sapere come riflette il code-behind.
DATT OZA

2
@ DATT: cosa intendi per "specificare"? Fondamentalmente, se si imposta Mode = TwoWay in XAML, quando si modifica il valore della GUI, verrà automaticamente aggiornata la proprietà C #. Ma la tua proprietà in code-behind deve essere implementata in una classe (come un ViewModel) che implementa l'interfaccia INotifyPropertyChanged. Quando il code-behind modifica il valore della proprietà tramite set, è necessario chiamare PropertyChanged in modo che la GUI riceva una notifica della modifica del valore e si aggiorni automaticamente.
Dave,

1
Se non specifichi nulla, il comportamento dipenderà dalla PROPRIETÀ che stai utilizzando.
Mauro Sampietro

39

Un'associazione è composta da due entità:

  1. The Source (in genere il ViewModel negli scenari MVVM)
  2. Il target (il controllo dell'interfaccia utente)

La destinazione deve essere a DependencyObject(affinché il binding funzioni) e l'origine può essere a DependencyObjectoppure dovrebbe avere un meccanismo per imitare il sistema di binding di WPF a causa della sua modifica ( INotifyPropetyChnagedinterfaccia di implementazione ).


MVVM consiglia al progetto ViewModel di essere libero da qualsiasi riferimento correlato alla visualizzazione e quindi si consiglia di utilizzare l' INotifyPropertyChangedinterfaccia 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 TextPropertydella TextBoxclasse è DataBound per (dire) la UserNameproprietà 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.

  1. OneWay : la proprietà di destinazione ascolterà la proprietà di origine modificata e si aggiornerà da sola. Se si modifica a livello di codice la UserNameproprietà 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.
  2. TwoWay : la proprietà di destinazione ascolterà la proprietà di origine modificata e si aggiornerà da sola. AND La proprietà di origine ascolterà la proprietà di destinazione che viene modificata e si aggiornerà. Sia il TextPropertyche la UserNameproprietà 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.
  3. OneWayToSource : la proprietà Source cambierà se la proprietà target viene modificata. Se l'utente modifica il TextProperty, la UserNameproprietà assumerà il valore modificato. Anche questo ha un costo intermedio poiché il sistema di rilegatura controlla solo Target per i cambiamenti.
  4. OneTime : questo accade solo una volta durante la durata del binding, la proprietà Target verrà aggiornata con la proprietà Source quando avviene il binding. Questo è il meno costoso ed è consigliabile per gli scenari in cui devono essere visualizzati dati statici, ad esempio Label, TextBlockecc.

Se non si menziona nulla, ogni proprietà di destinazione ha una modalità di associazione predefinita associata a se stessa. Ad esempio, il TextPropertydi a TextBoxha la modalità di associazione predefinita come TwoWay. Per il TextPropertydi 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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.