2015-09-29 22 views
6

Quando si utilizza la sintassi tradizionale {Binding}, è possibile specificare il nome dell'elemento per puntare a un controllo specifico sulla pagina e poter accedere alle sue proprietà. Per esempio se la pagina si chiama page si potrebbe fare:Alternativa a ElementName in x: Associazione con DataTemplates

{Binding ElementName=Page, Path=Name} 

Con la sintassi {x:Bind} si dice

Con x: Bind, non è necessario utilizzare ElementName = xxx come parte del espressione vincolante. Con x: Bind, è possibile utilizzare il nome dell'elemento come prima parte del percorso per il binding poiché gli elementi denominati diventano campi all'interno della pagina o il controllo utente che rappresenta l'origine di associazione radice .

Così, per l'esempio precedente in {x: Bind} sarebbe

{x:Bind page.Name} 

che funziona bene, fino a quando è all'interno di un modello di dati (ad esempio ItemTemplate di un ListView). Nel qual caso non funziona più in quanto è alla ricerca di Page sul tipo di dati specificato che conduce alla seguente errore (assumendo che il mio tipo di dati è customer):

XamlCompiler errore WMC1110: binding non valido percorso 'Page.Name ': Proprietà 'Pagina' non può essere trovato sul tipo di 'clienti'

Qual è la soluzione di utilizzare {x: Bind} sintassi con DataTemplates e controlli di accesso al di fuori del modello di dati?

codice di esempio è disponibile here (nota specifica commit)

risposta

9

Per quanto ne so, a questo punto nel tempo non c'è modo di legarsi direttamente a una proprietà di un controllo utilizzando il x: metodo bind come fa non supporta il nome dell'elemento all'interno della sua definizione di bind.

Ciò non significa che non si possa associare a un controllo all'interno di un dataTemplate si può ancora fare qualcosa del genere per accedere ai controlli ma non si è in grado di utilizzare la sintassi x: Bind compilata.

Il motivo dell'errore che si ottiene è dovuto al modo in cui i modelli di dati controllano la loro origine dati. Il bind x: Bind non può fare riferimento a un oggetto di controllo e il tipo di cliente utilizza la proprietà o il percorso Page.Name. Come mostrato sopra, l'unico modo reale di accedere alle proprietà di controllo dell'utente al di fuori del proprio controllo usando solo XAML è quello di ricorrere al meccanismo di bind standard.

Spero che questo risponda alla tua domanda.