63 votes

Différence entre Binding et x:Bind

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

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

La page d'accueil du site MSDN indique seulement que "les objets de liaison créés par {x:Bind} y {Binding} sont largement équivalents sur le plan fonctionnel" et que x:Bind est plus rapide .

Mais quelle est la différence entre les deux ?

Parce que "largement équivalent sur le plan fonctionnel" ne signifie pas "équivalent".

Le lien de ma citation : MSDN

Ma question est donc la suivante :

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

3 votes

La différence la plus significative est sans doute (comme indiqué dans le document Extension de balisage {x:Bind} ) : "Les liaisons compilées sont fortement typées et résolvent le type de chaque étape d'un chemin. Si le type retourné n'a pas le membre, il échouera au moment de la compilation ."

0 votes

J'aimerais savoir à quel point x:Bind est plus rapide que Binding. Puis-je m'attendre à ce qu'il soit 1,5x, 2x, 10x, etc. plus rapide ? Comme tout cela se passe en XAML, je n'ai pas connaissance d'un moyen de le mesurer.

63voto

Henk Holterman Points 153608

La liste suivante n'est probablement pas exhaustive, mais les principales différences sont les suivantes

  • Ancien style {Binding }

    • se lie au DataContext
    • se lie à un nom de propriété, flexible quant au type de source réel
  • Nouveau style {x:Bind }

    • se lie à l'élément Framework (classe code-behind)
    • nécessite que tous les types soient fixés au moment de la compilation
    • le mode OneTime, plus frugal, est utilisé par défaut

Et à partir de la version 14393 , {x:Bind } soutiennent :

  • liaison directe BooleanToVisibility, sans convertisseur de valeur
  • élargi Liaison des fonctions
  • casting
  • indexeurs de dictionnaires

La version plus récente {x:Bind } est un peu plus rapide à l'exécution, mais, ce qui est tout aussi important, elle génère des erreurs de compilation en cas de liaisons erronées. Avec {Binding }, vous verriez simplement un contrôle vide dans la plupart des cas.

Pour une comparaison approfondie, vérifiez : Comparaison des caractéristiques {x:Bind} et {Binding}.

2 votes

J'ajouterais des exemples expliquant la signification de chaque affirmation. Dans mon cas particulier {Binding Data.Name, Mode=OneWay} n'a pas fonctionné pour les mises à jour (bien que Data et Name aient mis en œuvre INotifyPropertyChanged ), mais {x:Bind Data.Name, Mode=OneWay} a fait le travail.

13voto

navin rathore Points 61

{x:Bind} exécute un code spécial qu'il génère au moment de la compilation. {Binding} utilise l'inspection générale des objets en cours d'exécution. En conséquence, {x:Bind} est très performant et fournit une validation à 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.

Parce que {x:Bind} utilise du code généré pour obtenir ses avantages, il nécessite des informations sur les types 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 qui est également susceptible d'être modifiée au moment de l'exécution. La propriété {x:Bind} nouvellement disponible pour Windows 10, est une alternative à l'extension de balisage {Binding} . {x:Bind} n'a pas certaines des caractéristiques de {Binding} mais il s'exécute en moins de temps et de mémoire que le {Binding} et permet un meilleur débogage.

6 votes

Pourriez-vous ajouter la source que vous citez, s'il vous plaît ?

1 votes

@AxelMeier La réponse contient des citations de x:Bind markup extension Pour être précis premier paragraphe provient de la introduction de cette page y deuxième paragraphe provient de Remarques section de cette page

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X