Compartir a través de


Extensión de marcado {Binding}

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 de la vinculación de datos en tu aplicación con de {Binding} (y para obtener una comparación completa entre {x:Bind} y {Binding}), consulta Vinculación de datos en profundidad.

La extensión de marcado {Binding} se usa para enlazar propiedades en controles a valores procedentes de un origen de datos, como de código. El {Binding} se convierte durante la carga de XAML en una instancia de la clase Binding de . 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 transferir cambios en el valor de control de nuevo a 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 Información general sobre las propiedades de dependencia.

{Binding} tiene la misma prioridad 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 Descripción
propertyPath Una cadena que especifica la ruta de acceso de la propiedad para la vinculación. Más información se encuentra en la siguiente sección Ruta de acceso de la propiedad.
propiedades de enlace propName=valor[, propName=valor]*
Una o varias propiedades de enlace que se especifican mediante una sintaxis de par nombre-valor.
nombrePropiedad Nombre de cadena de la propiedad que se va a establecer en el objeto binding . Por ejemplo, "Converter".
valor Valor en el que se va a establecer la propiedad. La sintaxis del argumento depende de las propiedades de la clase Binding que se pueden establecer con {Binding} en la sección siguiente.

Ruta de acceso de la propiedad

Ruta describe la propiedad a la que estás vinculando (de la propiedad de origen). Path es un parámetro posicional, lo que significa que puede usar explícitamente el nombre del parámetro ({Binding Path=EmployeeID}), o puede especificarlo como el primer parámetro sin nombre ({Binding EmployeeID}).

El tipo de ruta es una ruta de propiedad, que es una cadena que se evalúa como una propiedad o una subpropiedad del tipo personalizado o de un tipo de framework. El tipo puede ser un DependencyObject, pero no es necesario que lo sea. Los pasos de una ruta de acceso de propiedad se delimitan por puntos (.) y se pueden 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 del nombre de pila de un objeto Employee, la ruta de acceso de la propiedad podría ser "Employee.FirstName". 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 elemento del control de elementos se ocuparía 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].Jugadores", donde el literal "[]" encierra el "0" que especifica el primer elemento de una colección.

Al utilizar un enlace ElementName a un DependencyObject existente, puedes usar propiedades adjuntas como parte de la ruta de acceso de la propiedad. Para desambiguar una propiedad adjunta para que el punto intermedio del nombre de la propiedad adjunta no se considere un paso en una ruta de acceso de propiedad, coloque paréntesis alrededor del nombre de propiedad adjunta calificado por el 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 tendrán que 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 una ruta de acceso de propiedad, las rutas de acceso de propiedad en áreas de características de animación y la construcción de un objeto PropertyPath, consulta Sintaxis de ruta de acceso de propiedades .

Propiedades de la clase Binding que se puede establecer con {Binding}

{Binding} se ilustra 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 de propName=valor, 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 la {Binding}.

Propiedad Descripción
ruta de acceso Consulte la sección de propiedad en la ruta de acceso anterior.
convertidor Especifica un objeto convertidor al que llama el motor de vinculación. El convertidor puede configurarse en el marcado mediante la extensión de marcado {StaticResource} para referirse a ese objeto desde un diccionario de recursos.
ConvertidorDeIdioma Especifica la referencia cultural que va a usar el convertidor. (Si va a establecer Converter.) La cultura 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ás configurando Converter.) La mayoría de los convertidores utiliza lógica simple que obtiene toda la información que necesita del valor pasado para convertir y no necesita un valor ConverterParameter. El parámetro ConverterParameter es para implementaciones de convertidores más complejas que tienen lógica condicional que se desactiva 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 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.
ValorDeReemplazo 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. Configurar la extensión de marcado {RelativeSource} .
Fuente Especifica el origen de datos del objeto. Dentro de la extensión de marcado enlace de , la propiedad source de requiere una referencia de objeto, como una referencia de extensión de marcado {StaticResource} referencia. 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 el dataContext compartido de para varios enlaces. Para obtener más información, consulte DataContext o el Enlace de datos en profundidad .
ValorNuloObjetivo Especifica un valor para mostrar cuando el valor de origen se resuelve, pero resulta ser explícitamente nulo.
ActivadorDeOrigenDeActualización Especifica el momento de las actualizaciones del origen de enlace. Si no se especifica, el valor predeterminado es Valor predeterminado.

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" de Vinculación de datos en profundidad.

Nota:

A partir de Windows 10, versión 1607, el marco XAML proporciona un convertidor integrado de Booleano a Visibilidad. El convertidor asigna true al valor de enumeración Visible y false a Colapsado de manera que se pueda enlazar una propiedad Visibility 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 de versión adaptable.

Source, RelativeSourcey ElementName especifican un origen de enlace, por lo que son mutuamente excluyentes.

Sugerencia Si necesita especificar una sola llave para un valor, como en Ruta de acceso o ConverterParameter, preceda a una barra invertida: \{. Como alternativa, coloque entre comillas secundarias toda la cadena que contiene los corchetes que deben ser escapados, por ejemplo, ConverterParameter='{Mix}'.

Ejemplos

<!-- 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. Path en este caso se muestra explícitamente denominado como una propiedad Binding . El camino 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 deslizador denominado sliderValueConverter.

Tenga en cuenta cómo el valor de la propiedad Converter utiliza otra extensión de marcado, la extensión de marcado {StaticResource}, por lo que hay dos usos de extensiones de marcado anidadas aquí. Primero se evalúa el interno, por lo que una vez que se obtiene el recurso, hay un práctico IValueConverter (una clase personalizada creada por el elemento local:S2Formatter en los recursos) que el enlace 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. Tan pronto como escriba "{Binding", las propiedades de contexto de datos apropiadas para se muestran en el desplegable. IntelliSense también ayuda con las otras propiedades de Binding. Para que esto funcione, debe tener configurado ya sea el contexto de datos o el contexto de datos en tiempo de diseño en la página de marcado. Ir a la definición (F12) también funciona con {Binding}. Como alternativa, puede usar el cuadro de diálogo de enlace de datos.