2016-05-23 37 views
21

Cosa usare in UWP, Binding o x:Bind e qual è la differenza tra loro?Differenza tra Binding e x: Bind

Perché vedo un sacco di post in cui le persone usano Binding e leggo solo con x:Bind in UWP.

Alla home page di MSDN si dice solo che "gli oggetti di associazione creati da {x:Bind} e {Binding} sono in gran parte equivalenti dal punto di vista funzionale." e che x:Bind è più veloce.

Ma qual è la differenza tra loro?

Perché "ampiamente funzionalmente equivalente" non significa equivalente.

il link dal mio Citazione: MSDN

Quindi la mia domanda è:

Qual è la differenza nell'uso x vincolanti o: Bind in UWP?

+2

Probabilmente la differenza più significativa è (come indicato nell'estensione di mark [{x: Bind}] (https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind- markup-extension)): * "I binding compilati sono fortemente tipizzati e risolvono il tipo di ogni passaggio in un percorso.Se il tipo restituito non ha il membro, ** fallirà al momento della compilazione **." * – IInspectable

risposta

27

Quello che segue è probabilmente non è completo, ma alcune delle principali differenze sono

  • Anziana {Binding }

    • si lega al DataContext
    • si lega ad un nome di proprietà, flessibili circa la tipo di fonte attuale


  • Nuovo stile {x:Bind }
    • si lega all'elemento quadro (classe code-behind)
    • esigenze di tutti i tipi fissati al momento della compilazione
    • default la modalità OneTime più frugale

E starting with build 14393, {x:Bind } supporti:

  • BooleanToVisibility diretta vincolante, senza un ValueConverter
  • ampliato vincolante Funzione
  • colata
  • indicizzatori dizionario

La più recente {x: Bind} è un Poco più veloce in fase di esecuzione ma altrettanto importante darà errori del compilatore per collegamenti errati. Con {Binding} vedresti solo un controllo vuoto nella maggior parte dei casi.

6

{x:Bind} esegue il codice di scopo speciale, che genera in fase di compilazione. {Binding} utilizza l'ispezione dell'oggetto runtime per scopi generici. Di conseguenza, {x:Bind} offre grandi prestazioni e fornisce la convalida in fase di compilazione delle espressioni di collegamento. Supporta il debug consentendo di impostare i punti di interruzione nei file di codice generati come classe parziale per la pagina.

Poiché {x:Bind} utilizza il codice generato per ottenere i suoi vantaggi, richiede informazioni sul tipo al momento della compilazione. Ciò significa che non è possibile legarsi a proprietà in cui non si conosce il tipo in anticipo. Per questo motivo, non è possibile utilizzare {x:Bind} con la proprietà DataContext che è di tipo Object ed è anche soggetto a modifiche in fase di esecuzione. L'estensione markup {x:Bind}, nuova per Windows 10, è un'alternativa a {Binding}. {x:Bind} manca alcune delle funzionalità di {Binding}, ma viene eseguito in meno tempo e meno memoria di {Binding} e supporta il debug migliore.

+2

Potresti aggiungere la fonte da cui stai citando, per favore? –