In Delphi XE2 LiveBindings, è necessario associare un controllo VCL di qualsiasi tipo a una proprietà di qualsiasi tipo su un oggetto arbitrario (non componente). Posso farlo unidirezionalmente. Ma ho bisogno di farlo in modo bidirezionale.È necessario il LiveBinding bidirezionale tra un controllo e un oggetto
Diciamo che voglio associare un TPerson.PersonName: stringa a un TEdit.Text.
Quello che ho ora è semplice.
- Creare una nuova applicazione VCL, aggiungere un TBindScope, TBindingsList, TEdit.
- Creare un'istanza di TPerson denominata person1.
- Utilizzando un BindingList, aggiungere una proprietà TBindExpression.
- Con BindExpression
-
- set ControlComponent a Edit1
-
- set ControlExpression a 'Testo'
-
- set SourceComponent a BindScope1
-
- set SourceExpression a PersonName
- Aggiungi un pulsante; all'evento Click aggiungo: BindScope1.DataObject: = person1;
- Aggiungi un pulsante; all'evento Click che aggiungo (solo uno è necessario, ma fino a quando funzionerà proverò entrambi).
-
- TBindings.Notify (mittente, '');
-
- BindingsList1.Notify (mittente, '');
Il primo pulsante lega nella prima direzione. Il secondo pulsante non sembra mai scrivere il valore sulla proprietà person1.PersonName.
Ho sperimentato con il codice di notifica, la direzione di rilegatura, i tipi di binding, le espressioni, SourceMember, ecc. A volte ottengo errori di runtime nella configurazione di bindexpression, il resto del tempo il binding è semplicemente unidirezionale.
Mi aspetto di fare clic sul secondo pulsante e vedere il contenuto di Edit1.Text scritto in person1.PersonName.
Se devo fare tutto questo dal codice, lo prenderò in considerazione e tali esempi sono benvenuti, ma voglio davvero farlo attraverso il designer, se possibile.
Nota che non mi interessa legare tra due controlli.
Nota anche che ho già scaricato e verificato i progetti di esempio di LiveBinding e non ho trovato nessuno che lo faccia. Se questo è sbagliato, per favore sii specifico quando lo fai notare. Ho anche letto il DocWiki. Non copre il binding bidirezionale se non utilizzando i controlli DB LiveBinding. Non sto utilizzando i controlli DB LiveBinding né sto utilizzando un DataSet. Quindi, a meno che tu non possa spiegarmi perché dovrei usarli, non avrò bisogno di alcuna informazione su quei controlli.
Uso DSharp anziché LiveBindings e fare questo due liner (uno per attuare il setter di una proprietà che dovrebbe obbligatorio consapevoli e uno per creare il legame) –