Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Hay disponible un nuevo mecanismo de enlace para Windows 10, que está optimizado para la productividad del desarrollador y el rendimiento. Consulte la extensión de marcado {x:Bind}.
Nota:
Para obtener información general sobre el uso del enlace de datos en la aplicación con {Binding} (y para obtener una comparación completa entre {x:Bind} y {Binding}), consulta Enlace de datos en profundidad.
La extensión de marcado {Binding} se usa para enlazar propiedades de datos en controles a valores procedentes de un origen de datos como código. La extensión de marcado {Binding} se convierte durante la carga de XAML en una instancia de la clase Binding. Este objeto de enlace obtiene un valor de una propiedad de un origen de datos y lo inserta en la propiedad del control . El objeto de enlace se puede configurar opcionalmente para observar los cambios en el valor de la propiedad del origen de datos y actualizarse en función de esos cambios. También se puede configurar opcionalmente para insertar cambios en el valor de control de nuevo en la propiedad de origen. La propiedad que es el destino de un enlace de datos debe ser una propiedad de dependencia. Para obtener más información, consulte Introducción a las propiedades de dependencia.
{Binding} tiene la misma precedencia de propiedad de dependencia que un valor local y establecer un valor local en código imperativo quita el efecto de cualquier {Binding} establecido en el marcado.
Uso de atributos XAML
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
| Término | Description |
|---|---|
| propertyPath | Cadena que especifica la ruta de acceso del atributo para el enlace. A continuación encontrará más información en la sección Ruta de acceso de la propiedad . |
| bindingProperties |
propName=value[, propName=value]* Una o varias propiedades de enlace que se especifican mediante una sintaxis de par nombre-valor. |
| propName | Nombre de cadena de la propiedad que se va a establecer en el objeto Binding . Por ejemplo, "Converter". |
| value | Valor en el que se va a establecer la propiedad. La sintaxis del argumento depende de la propiedad properties de la clase Binding que se puede establecer con la sección {Binding} siguiente. |
Ruta de acceso de la propiedad
Path describe la propiedad a la que está enlazando (la propiedad de origen). Path es un parámetro posicional, lo que significa que puede usar el nombre del parámetro explícitamente ({Binding Path=EmployeeID}) o puede especificarlo como el primer parámetro sin nombre ({Binding EmployeeID}).
El tipo de Path es una ruta de propiedad, que es una cadena que se evalúa como una propiedad o una subpropiedad de su tipo personalizado o de un tipo de framework. El tipo puede ser, pero no es necesario, un DependencyObject. Los pasos de una ruta de acceso de propiedad se delimitan por puntos (.) y puede incluir varios delimitadores para recorrer las subpropiedades sucesivas. Use el delimitador de puntos independientemente del lenguaje de programación utilizado para implementar el objeto al que se enlaza.
Por ejemplo, para enlazar la interfaz de usuario a la propiedad nombre de un objeto empleado, la ruta de acceso de la propiedad podría ser "Empleado.Nombre". Si vas a enlazar un control de elementos a una propiedad que contiene los dependientes de un empleado, la ruta de acceso de la propiedad podría ser "Employee.Dependents", y la plantilla de elementos del control se encargará de mostrar los elementos en "Dependientes".
Si el origen de datos es una colección, una ruta de acceso de propiedad puede especificar elementos de la colección por su posición o índice. Por ejemplo, "Teams[0].Players", donde la expresión "[]" encierra el "0" que especifica el primer elemento de una colección.
Al usar un enlace ElementName a un DependencyObject existente, puede usar propiedades adjuntas como parte de la ruta de acceso de la propiedad. Para desambiguar una propiedad adjunta, de modo que el punto intermedio del nombre de la propiedad adjunta no se considere un paso en una ruta de acceso de propiedad, coloque entre paréntesis el nombre de la propiedad adjunta calificado por su propietario; por ejemplo, (AutomationProperties.Name).
Un objeto intermedio de ruta de acceso de propiedad se almacena como un objeto PropertyPath en una representación en tiempo de ejecución, pero la mayoría de los escenarios no necesitarán interactuar con un objeto PropertyPath en el código. Normalmente, puedes especificar la información de enlace que necesitas mediante XAML.
Para obtener más información sobre la sintaxis de cadena de caracteres de una ruta de acceso de propiedad, las rutas de acceso de propiedades en las áreas de características de animación y la construcción de un objeto PropertyPath, vea Sintaxis de rutas de acceso a propiedades.
Propiedades de la clase Binding que se puede establecer con {Binding}
{Binding} se muestra con la sintaxis de marcador de posición bindingProperties porque hay varias propiedades de lectura y escritura de un Binding que se pueden establecer en la extensión de marcado. Las propiedades se pueden establecer en cualquier orden con pares devalores= separados por comas. Algunas de las propiedades requieren tipos que no tienen una conversión de tipos, por lo que requieren extensiones de marcado propias anidadas dentro de {Binding}.
| Propiedad | Description |
|---|---|
| de ruta de acceso de |
Consulte la sección Ruta de acceso de la propiedad anterior. |
| Convertidor | Especifica un objeto de convertidor al que llama el motor de enlace. El convertidor se puede establecer en marcado mediante la extensión de marcado {StaticResource} para hacer referencia a ese objeto desde un diccionario de recursos. |
| ConverterLanguage | Especifica la referencia cultural que va a usar el convertidor. (Si está estableciendo Converter). La referencia cultural se establece como un identificador basado en estándares. Para obtener más información, consulta ConverterLanguage |
| ConverterParameter | Especifica un parámetro de convertidor que se puede usar en la lógica del convertidor. (Si está estableciendo Converter). La mayoría de los convertidores usan lógica simple que obtienen toda la información que necesitan del valor pasado para convertir y no necesitan un valor ConverterParameter . El parámetro ConverterParameter es para implementaciones de convertidores más complejas que tienen lógica condicional que se activa según lo que se pasa en ConverterParameter. Puede escribir un convertidor que use valores distintos de cadenas, pero esto no es habitual, consulta Comentarios en ConverterParameter para obtener más información. |
| ElementName | Especifica un origen de datos haciendo referencia a otro elemento de la misma construcción XAML que tiene una propiedad Name o un atributo x:Name. Esto suele usarse para compartir valores relacionados o usar subpropiedades de un elemento de interfaz de usuario para proporcionar un valor específico para otro elemento, por ejemplo, en una plantilla de control XAML. |
| FallbackValue | Especifica un valor que se va a mostrar cuando no se puede resolver el origen o la ruta de acceso. |
| Modo | Especifica el modo de enlace, como uno de estos valores: "OneTime", "OneWay" o "TwoWay". Estos corresponden a los nombres constantes de la enumeración BindingMode . El valor predeterminado es "OneWay". Tenga en cuenta que esto difiere del valor predeterminado de {x:Bind}, que es "OneTime". |
| RelativeSource | Especifica un origen de datos mediante la descripción de la posición del origen de enlace en relación con la posición del destino de enlace. Esto se usa con más frecuencia en enlaces dentro de plantillas de control XAML. Establecer la extensión de marcado {RelativeSource}. |
| Fuente | Especifica el origen de datos del objeto. Dentro de la extensión de marcado Binding , la propiedad Source requiere una referencia de objeto, como una referencia de extensión de marcado {StaticResource} . Si no se especifica esta propiedad, el contexto de datos que actúa especifica el origen. Es más habitual no especificar un valor de origen en enlaces individuales y, en su lugar, confiar en DataContext compartido para varios enlaces. Para obtener más información, consulte DataContext o Enlace de datos en profundidad. |
| TargetNullValue | Especifica un valor que se va a mostrar cuando el valor de origen se resuelve, pero es explícitamente NULL. |
| UpdateSourceTrigger | Especifica la programación de las actualizaciones de la fuente de enlace. Si no se especifica, el valor predeterminado es Default. |
Nota:
Si va a convertir el marcado de {x:Bind} a {Binding}, tenga en cuenta las diferencias en los valores predeterminados de la propiedad Mode .
Converter, ConverterLanguage y ConverterLanguage están relacionados con el escenario de convertir un valor o tipo del origen de enlace en un tipo o valor compatible con la propiedad de destino de enlace. Para obtener más información y ejemplos, consulte la sección "Conversiones de datos" del enlace de datos en profundidad.
Nota:
A partir de Windows 10, versión 1607, el marco XAML proporciona un convertidor Booleano integrado a Visibility. El convertidor asigna true al valor de enumeración Visible y false a Collapsed para poder enlazar una propiedad Visibilidad a un booleano sin crear un convertidor. Para usar el convertidor integrado, la versión mínima del SDK de destino de la aplicación debe ser 14393 o posterior. No se puede usar cuando la aplicación tiene como destino versiones anteriores de Windows 10. Para obtener más información sobre las versiones de destino, consulta Código adaptable de versión.
Source, RelativeSource y ElementName especifican un origen de enlace, por lo que son mutuamente excluyentes.
Sugerencia
Si necesita especificar una sola llave para un valor, como en Path o ConverterParameter, preceda a una barra diagonal inversa: \{. Como alternativa, incluya toda la cadena que contiene los corchetes que necesitan escaparse dentro de un conjunto adicional de comillas, por ejemplo ConverterParameter='{Mix}'.
Examples
<!-- binding a UI element to a view model -->
<Page ... >
<Page.DataContext>
<local:BookstoreViewModel/>
</Page.DataContext>
<GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
<Page.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</Page.Resources>
<Slider x:Name="sliderValueConverter" ... />
<TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
Mode=OneWay,
Converter={StaticResource GradeConverter}}"/>
</Page>
En el segundo ejemplo se establecen cuatro propiedades binding diferentes: ElementName, Path, Mode y Converter.
Ruta en este caso se muestra explícitamente como una propiedad denominada Binding. La Path se evalúa como un origen de enlace de datos que es otro objeto en el mismo árbol de objetos en tiempo de ejecución, un control deslizante denominado sliderValueConverter.
Tenga en cuenta cómo el valor de la propiedad Converter usa otra extensión de marcado, {StaticResource}, por lo que hay dos usos de extensiones de marcado anidadas aquí. El elemento interno se evalúa primero, por lo que una vez que se ha obtenido el recurso, hay un IValueConverter práctico (una clase personalizada instanciada por el elemento local:S2Formatter en los recursos) que la vinculación puede usar.
Compatibilidad con herramientas
Microsoft IntelliSense en Microsoft Visual Studio muestra las propiedades del contexto de datos al crear {Binding} en el editor de marcado XAML. En cuanto escriba "{Binding", las propiedades de contexto de datos adecuadas para Path se muestran en la lista desplegable. IntelliSense también ayuda con las otras propiedades de Binding. Para que esto funcione, debe tener ya sea el contexto de datos o el contexto de datos en tiempo de diseño establecido en la página de marcado. Ir a Definición (F12) también funciona con {Binding}. Como alternativa, puede usar el cuadro de diálogo de enlace de datos.