2016-05-23 6 views
21

Was in UWP verwenden, Binding oder x:Bind und was ist der Unterschied zwischen ihnen?Unterschied zwischen Bindung und x: Bind

Weil ich viele Beiträge zu sehen, wo die Menschen Binding verwenden und ich nur mit x:Bind in UWP binden.

Auf der MSDN-Homepage heißt es nur, dass "die von {x:Bind} und {Binding} erstellten Bindungsobjekte weitgehend funktional äquivalent sind." und das x:Bind ist schneller.

Aber was ist der Unterschied zwischen ihnen?

Weil "weitgehend funktional äquivalent" bedeutet nicht gleichwertig.

Der Link von meinem Zitat: MSDN

Also meine Frage ist:

Was ist der Unterschied Bindung oder x in Verwendung: Bind in UWP?

+2

Wahrscheinlich ist der wichtigste Unterschied (wie in Markup-Erweiterung [{x: Bind}] angegeben (https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind- markup-extension)): * "Kompilierte Bindungen sind stark typisiert und lösen den Typ jedes Schritts in einem Pfad auf. Wenn der zurückgegebene Typ nicht das Mitglied hat, ** wird es bei der Kompilierung fehlschlagen **." * – IInspectable

Antwort

27

Das folgende ist wahrscheinlich nicht vollständig, aber einige der wichtigsten Unterschiede sind

  • Old style {Binding }

    • an den Datacontext
    • bindet an einen Namen, flexibel über das bindet aktueller Quelltyp


  • neue Art {x:Bind }
    • bindet an das Rahmenelement (Code-Behind-Klasse)
    • Bedürfnisse aller Typen
    • standardmäßig auf den sparsamen OneTime Modus bei der Kompilierung festgelegt

Und starting with build 14393, {x:Bind } unterstützt:

  • direkte BooleanToVisibility Bindung, ohne Valueconverter
  • erweiterte Funktion Bindung
  • Casting
  • Wörterbuch Indexer

Die neuere {x: Bind} a etwas schneller zur Laufzeit, aber ebenso wichtig wird es Compilerfehler für fehlerhafte Bindungen geben. Mit {Binding} würden Sie in den meisten Fällen nur eine leere Kontrolle sehen.

6

{x:Bind} führt Spezialcode aus, den er zur Kompilierzeit generiert. {Binding} verwendet allgemeine Laufzeitobjektprüfung. Folglich weist {x:Bind} eine hohe Leistung auf und bietet eine Kompilierungszeitüberprüfung Ihrer Bindungsausdrücke. Es unterstützt das Debugging, indem es Ihnen ermöglicht, Haltepunkte in den Codedateien festzulegen, die als Teilklasse für Ihre Seite generiert werden.

Da {x:Bind} generierten Code verwendet, um seine Vorteile zu erzielen, benötigt es Typinformationen zum Zeitpunkt der Kompilierung. Das bedeutet, dass Sie nicht an Eigenschaften binden können, bei denen Sie den Typ im Voraus nicht kennen. Aus diesem Grund können Sie {x:Bind} nicht mit der DataContext-Eigenschaft verwenden, die vom Typ Object ist, und unterliegt auch Änderungen zur Laufzeit. Die Markup-Erweiterung {x:Bind} - neu für Windows 10 - ist eine Alternative zu {Binding}. {x:Bind} fehlt einige der Funktionen von {Binding}, aber es läuft in weniger Zeit und weniger Speicher als {Binding} und unterstützt besseres Debuggen.

+2

Könnten Sie bitte die Quelle, aus der Sie zitieren, hinzufügen? –