web-dev-qa-db-de.com

Unterschied zwischen Bindung und x: Bindung

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

Weil ich viele Posts sehe, in denen Leute Binding verwenden und ich nur Bind with x:Bind in UWP.

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

Aber was ist der Unterschied zwischen ihnen?

Denn "weitgehend funktional äquivalent" heißt nicht äquivalent.

Der Link aus meinem Zitat: MSDN

Meine Frage lautet also:

Was ist der Unterschied bei der Verwendung von Binding oder x: Bind in UWP?

43
SeeuD1

Das Folgende ist wahrscheinlich nicht vollständig, aber einige der Hauptunterschiede sind

  • Alter Stil {Binding }

    • bindet an den DataContext
    • bindet an einen Eigenschaftsnamen, der sich nach dem tatsächlichen Quelltyp richtet


  • Neuer Stil {x:Bind }
    • bindet an das Framework-Element (CodeBehind-Klasse)
    • muss alle Typen zur Kompilierungszeit behoben haben
    • standardmäßig wird der sparsamere OneTime-Modus verwendet

Und beginnend mit Build 1439 , {x:Bind } unterstützt:

  • direkte BooleanToVisibility-Bindung ohne ValueConverter
  • funktionsbindung erweitert
  • gießen
  • wörterbuch-Indexer

Das neuere {x: Bind} ist zur Laufzeit etwas schneller, aber genauso wichtig ist, dass es bei fehlerhaften Bindungen zu Compilerfehlern kommt. Mit {Binding} sehen Sie in den meisten Fällen nur ein leeres Steuerelement.

47
Henk Holterman

{x:Bind} Führt Spezialcode aus, der beim Kompilieren generiert wird. {Binding} Verwendet die allgemeine Laufzeitobjektprüfung. Folglich bietet {x:Bind} Eine hervorragende Leistung und ermöglicht die Validierung Ihrer verbindlichen Ausdrücke zur Kompilierungszeit. Es unterstützt das Debuggen, indem Sie Haltepunkte in den Codedateien festlegen können, die als Teilklasse für Ihre Seite generiert werden.

Da {x:Bind} Generierten Code verwendet, um seine Vorteile zu erzielen, sind zur Kompilierungszeit Typinformationen erforderlich. Dies bedeutet, dass Sie keine Bindung an Eigenschaften herstellen können, bei denen Sie den Typ nicht im Voraus kennen. Aus diesem Grund können Sie {x:Bind} Nicht mit der DataContext-Eigenschaft verwenden, die vom Typ Object ist und auch zur Laufzeit geändert werden kann. Die für Windows 10 neue Markuperweiterung {x:Bind} Ist eine Alternative zu {Binding}. {x:Bind} Verfügt nicht über alle Funktionen von {Binding}, Benötigt jedoch weniger Zeit und Speicher als {Binding} Und unterstützt ein besseres Debugging.

8
navin rathore