Sintaxis de Property-path

Applies to Windows and Windows Phone

Puedes usar la clase PropertyPath y la sintaxis de cadena para crear una instancia de un valor PropertyPath en XAML o en código. Los valores de PropertyPath se usan para el enlace de datos. Una sintaxis similar se usa para seleccionar el destino de las animaciones de guión gráfico. Pero la selección del destino de las animaciones no crea valores de PropertyPath subyacentes, sino que mantiene la información como una cadena. Para los dos escenarios, una ruta de acceso de propiedades describe un cruce seguro de una o más relaciones de propiedades de objeto que finalmente se resuelven en una sola propiedad.

Puedes establecer una cadena de ruta de acceso de propiedades directamente en un atributo en XAML. Puedes usar la misma sintaxis de cadena para construir una PropertyPath que establezca un Binding en código, o establecer un destino de animación en código con SetTargetProperty. Hay dos áreas de características distintas en Windows en tiempo de ejecución que usan una ruta de acceso de propiedades: el enlace de datos y el destino de animaciones. La selección del destino de animaciones no crea valores de PropertyPath subyacentes en la implementación de Windows en tiempo de ejecución, sino que mantiene la información como una cadena, pero los conceptos de cruce seguro de propiedades de objetos son muy similares. El enlace de datos y la selección del destino de animaciones evalúan una ruta de acceso de propiedades de un modo ligeramente diferente, de forma que describiremos la sintaxis de la ruta de acceso de propiedad por separado para cada uno.

Ruta de acceso de propiedades para objetos en el enlace de datos

En Windows en tiempo de ejecución, puedes crear enlaces en el valor de destino de cualquier propiedad de dependencias. El valor de propiedad de origen de un enlace de datos no tiene que se una propiedad de dependencias; puede ser una propiedad en un objeto empresarial (por ejemplo, una clase escrita en un lenguaje Microsoft .NET o C++). O, el objeto de origen del valor de enlace puede ser una un objeto de dependencias existente ya definido por la aplicación. Pueden hacer referencia al origen un simple nombre de propiedad o un cruce seguro de las relaciones de propiedades de objetos en el gráfico del objeto empresarial.

Puedes crear un enlace con un valor de propiedad individual, o con una propiedad de destino que contenga listas o colecciones. Si el origen es una colección, o si la ruta de acceso especifica una propiedad de colección, el motor de enlace de datos hace que los elementos de la colección del origen coincidan con el destino de enlace, resultando en un comportamiento similar a llenar un ListBox con una lista de elementos de una colección de orígenes de datos sin tener que anticipar los elementos específicos en esa colección.

Atravesar un gráfico de objeto

El elemento de la sintaxis que denota el cruce seguro de una relación de propiedades de objetos en el gráfico de un objeto es el carácter de punto (.). Cada punto en una cadena de ruta de acceso de propiedades indica una división entre un objeto (lado izquierdo del punto) y una propiedad de ese objeto (lado derecho del punto). La cadena se evalúa de izquierda a derecha, lo que habilita el paso a través de varias relaciones de propiedades de objetos. Veamos un ejemplo:

<Binding Path="Customer.Address.StreetAddress1"

Esta ruta de acceso se evalúa del modo siguiente:

  1. En el objeto de contexto de datos (o un Source especificado por el mismo Binding) se busca una propiedad llamada "Customer".
  2. Se busca en el objeto que es el valor de la propiedad "Customer" una propiedad llamada "Address".
  3. Se busca en el objeto que es el valor de la propiedad "Address" una propiedad llamada "StreetAddress1".

En cada uno de estos pasos, el valor se trata como un objeto. El tipo de resultado se comprueba solo cuando se aplica el enlace a una propiedad específica. Este ejemplo daría un error si "Dirección" fuera solo un valor de cadena que no indicara qué parte de la cadena era la calle. Por lo general, el enlace apunta a los valores de propiedades anidados específicos de un objeto empresarial que tiene una estructura de información conocida y deliberada.

Reglas de las propiedades en una ruta de acceso de propiedades de enlace de datos

  • Todas las propiedades a las que hace referencia una ruta de acceso de propiedades deben ser públicas en el objeto empresarial de origen.
  • La propiedad final (la propiedad que es la última propiedad con nombre de la ruta de acceso) debe ser pública y mutable; no se puede enlazar con valores estáticos.
  • La propiedad final debe ser de lectura/escritura si esta ruta de acceso se usa como información de Path para un enlace bidireccional.

Indizadores

Una ruta de acceso de propiedades para el enlace de datos puede incluir referencias a propiedades indizadas. Esto permite el enlace a listas y vectores ordenadas, o a diccionarios y mapas. Usa corchetes "[]" para indicar una propiedad indizada. El contenido de estos corchetes puede ser un entero (para la lista ordenada) o una cadena sin comillas (para los diccionarios). También puedes enlazar con un diccionario en el que la clave sea un entero. Puedes usar propiedades indizadas diferentes en la misma ruta de acceso con un punto separando la propiedad del objeto.

Por ejemplo, considera un objeto empresarial en el que hay una lista de "Equipos" (lista ordenada), cada uno de los cuales tiene un diccionario de "Integrantes" en el que cada integrante recibe su clave por el apellido. Un ejemplo de ruta de acceso de propiedades a un integrante específico del segundo equipo sería: "Equipos[1].Integrantes[Smith]". (Usarías 1 para indicar el segundo elemento en "Equipos" porque la lista tiene un índice de cero).

Nota  La compatibilidad con la indización en orígenes de datos de C++ es limitada; consulta Introducción al enlace de datos.

Propiedades adjuntas

Las rutas de acceso de propiedades pueden incluir referencias a propiedades adjuntas. Como el nombre identificador de una propiedad adjunta ya incluye un punto, deberás encerrar el nombre de la propiedad adjunta entre paréntesis para que el punto no se considere un paso de propiedad de objeto. Por ejemplo, la cadena para especificar que se desea usar Canvas.ZIndex como ruta de acceso de enlace "(Canvas.ZIndex)". Para obtener más información sobre las propiedades adjuntas, consulta Introducción a las propiedades adjuntas.

Combinación de sintaxis de ruta de acceso de propiedades

Puedes combinar varios elementos de la sintaxis de ruta de acceso de propiedades en una sola cadena. Por ejemplo, puedes definir una ruta de acceso de propiedades que haga referencia a una propiedad adjunta indizada si tu origen de datos tuviera dicha propiedad.

Depuración de una ruta de acceso de propiedades de enlace

Como la ruta de acceso de la propiedad se interpreta con un motor de enlace y depende de la información que pueda estar presente solo en tiempo de ejecución, con frecuencia deberás depurar una ruta de acceso de propiedades para en enlace sin poder depender de la compatibilidad convencional con el tiempo de diseño o el tiempo de compilación en la herramientas de desarrollo. En muchos casos, el resultado en tiempo de ejecución de error al resolver una ruta de acceso de propiedades es un valor en blanco sin errores, porque ese es el comportamiento de reserva que tiene la resolución de enlaces. Afortunadamente, Microsoft Visual Studio proporciona un modo de salida de depuración que puede aislar la parte de una ruta de acceso de propiedades que especifica un origen de enlace que no se pudo resolver. Para obtener más información sobre el uso de esta herramientas de desarrollo, consulta la sección "Depuración" del tema Introducción al enlace de datos.

Ruta de acceso de propiedades para selección de destino de animaciones

Las animaciones dependen de la selección del destino de una propiedad de dependencias en la que los valores de guión gráfico se aplican cuando se ejecuta la animación. Para identificar el objeto en el que existe la propiedad que se va a animar, la animación selecciona como destino un elemento con el nombre (x:Name). Con frecuencia es necesario definir una ruta de acceso de propiedades que comience con el objeto identificado como Storyboard.TargetName y termine con el valor de propiedad de dependencias particular en el que debe aplicarse la animación. La ruta de acceso de propiedades se usa como valor de Storyboard.TargetProperty.

Para obtener más información sobre cómo definir animaciones en XAML, consulta Animaciones con guion gráfico.

Selección de destino simple

Si vas a animar una propiedad que existe en el propio objeto de destino y al tipo de esa propiedad se le puede aplicar directamente una animación (en vez de a una subpropiedad del valor de una propiedad), entonces podrás asignar un nombre a la propiedad que se va a animar sin una cualificación adicional. Por ejemplo, si seleccionas como destino una subclase Shape, como Rectangle, y aplicas un Color animado a la propiedad Fill, la ruta de acceso de la propiedad puede ser "Relleno".

Selección indirecta de destino de propiedades

Puedes animar una propiedad que es una subpropiedad del objeto de destino. Dicho de otro modo, si hay una propiedad del objeto de destino que es un objeto en sí mismo, y ese objeto tiene propiedades, deberás definir una ruta de acceso de propiedades que explique cómo pasar por esa relación de propiedades de objeto. Siempre que especifiques un objeto donde deseas animar una subpropiedad, encierra el nombre de la propiedad entre paréntesis y especifica la propiedad en el formato typename.propertyname. Por ejemplo, para especificar que deseas el valor de objeto de la propiedad RenderTransform de un objeto de destino, especifica "(UIElement.RenderTransform)" como el primer paso de la ruta de acceso de la propiedad. Esto no es aún una ruta de acceso completa, ya que no hay animaciones que se puedan aplicar a un valor de Transform directamente. Para este ejemplo, completarás la ruta de acceso de la propiedad de forma que la propiedad final sea una propiedad de una subclase Transform que la pueda animar un valor Double: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

Especificación de un elemento secundario particular en una colección

Para especificar un elemento secundario en una propiedad colección, puedes usar un indizador numérico. Usa corchetes "[]" alrededor del valor de índice entero. Puedes hacer referencia solo a listas ordenadas, pero no a diccionarios. Como una colección no es un valor que se pueda animar, el uso de un indizador nunca puede ser la propiedad final en una ruta de acceso de propiedades.

Por ejemplo, para especificar que deseas animar el primer punto de parada de color en un LinearGradientBrush que se aplica a la propiedad Background de un control, esta es la ruta de acceso de la propiedad: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Ten en cuenta que el indizador no es el último paso de la ruta de acceso y que el último paso debe hacer referencia particularmente a la propiedad GradientStop.Color del elemento 0 en la colección para aplicarle un valor animado Color.

Animación de una propiedad adjunta

No suele ser habitual, pero es posible animar una propiedad adjunta siempre que la propiedad adjunta tenga un valor que coincida con un tipo de animación. Como el nombre identificador de una propiedad adjunta ya incluye un punto, deberás encerrar el nombre de la propiedad adjunta entre paréntesis para que el punto no se considere un paso de propiedad de objeto. Por ejemplo, la cadena para especificar que deseas animar la propiedad adjunta Grid.Row en un objeto, usa la ruta de acceso de propiedad "(Grid.Row)".

Nota  Para este ejemplo, el valor de Grid.Row es un tipo de propiedad Int32. De modo que no podrás animarlo con una animación Double. En cambio, sí definirás una ObjectAnimationUsingKeyFrames que tenga componentes DiscreteObjectKeyFrame, donde el valor ObjectKeyFrame.Value está establecido como un entero, por ejemplo "0" o "1".

Reglas de las propiedades en una ruta de acceso de propiedades de selección de destino de animaciones

  • El punto inicial supuesto de la ruta de acceso de propiedades es el objeto identificado por un Storyboard.TargetName.
  • Todos los objetos y las propiedades a los que se hace referencia en la ruta de acceso de propiedad deben ser públicos.
  • La propiedad final (la propiedad que es la última propiedad con nombre de la ruta de acceso) debe ser pública, de escritura y de dependencias.
  • La propiedad final debe ser un tipo de propiedad que sea capaz de animarse mediante una de las amplias clases de tipos de animaciones (animaciones de Color, animaciones Double, animaciones de Point y ObjectAnimationUsingKeyFrames).

La clase PropertyPath

La clase PropertyPath es el tipo de propiedad subyacente de Binding.Path para el escenario de enlace.

La mayor parte de las veces, puedes aplicar una PropertyPath en XAML sin usar ningún código en absoluto. Pero en algunos casos, deberás definir un objeto PropertyPath mediante código y asignarlo a una propiedad en tiempo de ejecución.

PropertyPath tiene un constructor PropertyPath(String), pero no tiene un constructor predeterminado. La cadena que pases a este constructor es una cadena definida mediante la sintaxis de ruta de acceso de propiedades tal como ya hemos explicado. Esto es también la misma cadena que usarías para asignar Path como atributo XAML. La única API de la clase PropertyPath es la propiedad Path, que es de solo lectura. Podrías usar esta propiedad como la cadena de construcción de otra instancia de PropertyPath.

Temas relacionados

Introducción al enlace de datos
Animaciones con guion gráfico
Extensión de marcado Binding
PropertyPath
Binding
Binding constructor
DataContext

 

 

Mostrar:
© 2015 Microsoft