web-dev-qa-db-fra.com

Différence entre Binding et x: Bind

Que faut-il utiliser dans UWP, Binding ou x:Bind et quelle est la différence entre eux?

Parce que je vois beaucoup de messages où les gens utilisent Binding et je ne lie qu'avec x:Bind dans UWP.

Sur la page d'accueil MSDN, il est uniquement indiqué que "les objets de liaison créés par {x:Bind} et {Binding} sont largement équivalents sur le plan fonctionnel. "et que x:Bind est plus rapide .

Mais quelle est la différence entre eux?

Parce que "largement fonctionnellement équivalent" ne signifie pas équivalent.

Le lien de ma citation: MSDN

Donc ma question est:

Quelle est la différence dans l'utilisation de Binding ou x: Bind dans UWP?

43
SeeuD1

Ce qui suit n'est probablement pas complet, mais certaines des principales différences sont

  • Ancien style {Binding }

    • se lie au DataContext
    • se lie à un nom de propriété, flexible sur le type de source réel


  • Nouveau style {x:Bind }
    • se lie à l'élément Framework (classe code-behind)
    • nécessite tous les types fixés au moment de la compilation
    • utilise par défaut le mode OneTime plus économe

Et à partir de la version 1439 , {x:Bind } les soutiens:

  • liaison directe BooleanToVisibility, sans ValueConverter
  • liaison de fonction étendue
  • moulage
  • indexeurs de dictionnaire

Le nouveau {x: Bind} est un peu plus rapide à l'exécution mais tout aussi important, il donnera des erreurs de compilation pour les liaisons erronées. Avec {Binding}, vous verriez simplement un contrôle vide dans la plupart des cas.

47
Henk Holterman

{x:Bind} exécute du code spécial, qu'il génère au moment de la compilation. {Binding} utilise l'inspection générale des objets d'exécution. Par conséquent, {x:Bind} offre d'excellentes performances et fournit une validation au moment de la compilation de vos expressions de liaison. Il prend en charge le débogage en vous permettant de définir des points d'arrêt dans les fichiers de code qui sont générés en tant que classe partielle pour votre page.

Car {x:Bind} utilise le code généré pour obtenir ses avantages, il nécessite des informations de type au moment de la compilation. Cela signifie que vous ne pouvez pas vous lier à des propriétés dont vous ne connaissez pas le type à l'avance. Pour cette raison, vous ne pouvez pas utiliser {x:Bind} avec la propriété DataContext qui est de type Object et est également sujette à modification au moment de l'exécution. Le {x:Bind} l'extension de balisage - nouvelle pour Windows 10 - est une alternative à {Binding}. {x:Bind} manque certaines des fonctionnalités de {Binding}, mais il s'exécute en moins de temps et moins de mémoire que {Binding} et prend en charge un meilleur débogage.

8
navin rathore