xaml data-binding win-universal-app uwp

xaml - Diferencia entre Binding y x: Bind



data-binding win-universal-app (2)

Lo siguiente probablemente no esté completo, pero algunas de las principales diferencias son

  • Estilo antiguo {Binding }

    • se une al DataContext
    • se une a un nombre de propiedad, flexible sobre el tipo de fuente real


  • Nuevo estilo {x:Bind }
    • se une al elemento Framework (clase de código subyacente)
    • necesita todos los tipos arreglados en tiempo de compilación
    • Por defecto es el modo OneTime más frugal

Y a partir de la compilación 14393 , {x:Bind } admite:

  • enlace directo BooleanToVisibility, sin un ValueConverter
  • Enlace de función expandida
  • fundición
  • indexadores de diccionario

El nuevo {x: Bind} es un poco más rápido en tiempo de ejecución pero igual de importante dará errores de compilación para enlaces erróneos. Con {Binding} solo verías un Control vacío en la mayoría de los casos.

¿Qué usar en UWP, Binding o x:Bind y cuál es la diferencia entre ellos?

Porque veo muchas publicaciones en las que la gente usa Binding y solo lo hago con x:Bind en UWP.

En la página de inicio de MSDN solo dice que "los objetos de enlace creados por {x:Bind} y {Binding} son en gran medida funcionalmente equivalentes". y que x:Bind es más rápido .

Pero, ¿cuál es la diferencia entre ellos?

Porque "en gran medida funcionalmente equivalente" no significa equivalente.

El enlace de mi cita: MSDN

Entonces mi pregunta es:

¿Cuál es la diferencia al usar Binding o x: Bind en UWP?


{x:Bind} ejecuta código de propósito especial, que genera en tiempo de compilación. {Binding} utiliza la inspección de objetos de tiempo de ejecución de propósito general. En consecuencia, {x:Bind} tiene un gran rendimiento y proporciona validación en tiempo de compilación de sus expresiones de enlace. Admite la depuración al permitirle establecer puntos de interrupción en los archivos de código que se generan como la clase parcial para su página.

Debido a que {x:Bind} usa el código generado para lograr sus beneficios, requiere información de tipo en tiempo de compilación. Esto significa que no puede enlazar propiedades donde no conoce el tipo con anticipación. Debido a esto, no puede usar {x:Bind} con la propiedad DataContext que es de tipo Object, y también está sujeta a cambios en tiempo de ejecución. La extensión de marcado {x:Bind} (nueva para Windows 10) es una alternativa a {Binding} . {x:Bind} carece de algunas de las características de {Binding} , pero se ejecuta en menos tiempo y menos memoria que {Binding} y admite una mejor depuración.