2010-02-21 12 views

risposta

81
  • OneWay: utilizzare questo quando si desidera che la proprietà associata aggiorni l'interfaccia utente.
  • TwoWay: ha lo stesso comportamento di OneWay e OneWayToSource combinato. La proprietà bound aggiornerà l'interfaccia utente, e cambiamenti nell'interfaccia utente aggiornare la proprietà legata
  • OneTime (si può usare questo con un TextBox o un Checkbox per esempio.): Questo ha lo stesso comportamento di OneWay tranne lo farà aggiorna l'interfaccia utente solo una volta. Questa dovrebbe essere la tua scelta di default per il binding (per varie ragioni che non approfondirò qui), dovresti usare solo altri tipi di binding se hai effettivamente bisogno della funzionalità extra.
  • OneWayToSource: questo è l'opposto di OneWay - le modifiche del valore dell'interfaccia utente aggiornano la proprietà associata.

Se non si specifica nulla, il comportamento dipende dal controllo che si sta utilizzando.

Per ulteriori informazioni, vedere BindingMode enum on MSDN.

+0

Grazie. è utile ... Ma plz specifica l'esempio di TwoWay ... voglio sapere come si riflette il code-behind. –

+1

@DATT: cosa intendi con "specificare"? Fondamentalmente, se imposti Mode = TwoWay in XAML, quando cambi il valore della GUI, aggiornerà automaticamente 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 venga informata della modifica del valore e si aggiornerà automaticamente. – Dave

+0

Se non si specifica nulla, il comportamento dipende dal PROPRIETÀ che si sta utilizzando. – sam

16

Un legame è costituito da due entità:

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

il target è essere un DependencyObject (per il collegamento al lavoro) e l'origine può essere un DependencyObject o dovrebbe avere qualche meccanismo per imitare il sistema di binding WPF m su di esso viene cambiato (Implemeting interfaccia INotifyPropetyChnaged).


MVVM raccomanda il progetto ViewModel di essere libero da qualsiasi riferimento correlate Visualizzazione e quindi si consiglia di utilizzare INotifyPropertyChanged interfaccia per rendere l'oggetto sorgente viene ascoltata legandosi WPF. Il binding avviene tra una proprietà di Source e una proprietà di Target (deve essere un DependencyProperty). ad es. Il TextProperty della classe TextBox è DataBound per (dire) UserName la proprietà del modello di vista. Il binding WPF offre quattro tipi di binding. Ricorda che Binding viene eseguito sul thread UI, a meno che non venga specificato diversamente per l'esecuzione.

  1. OneWay: La proprietà bersaglio ascolterà la proprietà source sta cambiando e si aggiornerà in sé. Se si modifica a livello di programmazione la proprietà UserName di ViewwModel, verrà visualizzata nella casella di testo. Questo è di costo intermedio poiché il sistema di rilegatura guarda solo Source per le modifiche.
  2. TwoWay: la proprietà di destinazione ascolterà la proprietà di origine modificata e si aggiornerà automaticamente. AND La proprietà source ascolterà la proprietà target che viene modificata e si aggiornerà automaticamente. Entrambe le proprietà TextProperty e UserName rimarranno sincronizzate e si aggiorneranno a vicenda se si cambia. Questo è il più costoso in quanto il sistema di rilegatura deve controllare entrambe le parti per il cambiamento.
  3. OneWayToSource: la proprietà Source cambierà se la proprietà di destinazione viene modificata. Se l'utente cambia il TextProperty, la proprietà UserName riprenderà il valore modificato. Anche questo è di costo intermedio in quanto il sistema di rilegatura guarda solo Target per le modifiche.
  4. OneTime: Questo succede solo una volta durante la vita di Binding, il target proprietà sarà aggiornato con l'Fonte proprietà quando accade l'Binding. Questo è il meno costoso ed è consigliabile per gli scenari in cui devi mostrare dati statici, ad es. Label, TextBlock ecc

Se non si parla di niente, ogni bersaglio struttura dispone di una modalità di rilegatura predefinito associato con se stesso. Per esempio. il TextProperty di un TextBox ha la modalità di associazione predefinita come TwoWay. Per il TextProperty di un TextBlock è unidirezionale.

Si consiglia di scegliere la modalità corretta in quanto può aiutare a ridurre la latenza dell'applicazione, specialmente nei casi in cui si dispone di un numero elevato di controlli nell'interfaccia utente.

Per ulteriori informazioni su MVVM here è un articolo scritto da me.

Problemi correlati