The Information Systems and Computer Applications examination covers material that is usually taught in an introductory college-level business information systems course.

Introducción al desarrollo con Windows Phone (7.5) Parte VI by Ioseba Palop

Introducción al desarrollo con Windows Phone (7.5) Parte I  
Introducción al desarrollo con Windows Phone (7.5) Parte II  
Introducción al desarrollo con Windows Phone (7.5) Parte III  
Introducción al desarrollo con Windows Phone (7.5) Parte IV  
Introducción al desarrollo con Windows Phone (7.5) Parte V 

Una parte muy interesante del desarrollo en Silverlight y y WPF es el enlace a datos. Mediante esta “técnica” se enlaza el contenido de los controles (o cualquiera de sus propiedades) a propiedades de entidades, de la propia clase, o de otros controles. Con esto no se consigue mostrar el contenido, sino que además, enlazándolo con propiedades de dependencia (como es habitual en esta tecnología) se consigue tener los datos actualizados tanto en la entidad, como en la interfaz gráfica. Por si no fuera suficiente, el enlace a datos incluye “mecanismos” para formatear o convertir los valores que se están enlazando.

Los enlaces más comunes que se pueden realizar en una propiedad de control son:

  • Enlace a DataContext. Todos los controles que heredan de la clase FrameworkElement  tienen la propiedadDataContext, que será la que mantenga el contexto de los datos a los que se va a enlazar. Por defecto, esta propiedad hereda el contenido de la misma propiedad del control/contenedor padre, por lo que una vez establecida en el control ‘raíz’, estará disponible para todos los controles hijos. Dado que esta propiedad es de tipo Object, se le pueda asignar cualquier tipo de elemento (clases, colecciones, valores…). Es el tipo deBinding más común, y lo único que necesita es una propiedad a la que enlazarse, a través del atributo Path(incluso ni eso, como se verá más adelante). Cabe destacar que no solo se puede enlazar propiedades de tipo contenido, sino que se puede realizar en cualquier propiedad de un control, ya sea tamaños de letra, color, alineación, opacidad… Para mostrar un ejemplo, se crea una clase entidad, de nombre Persona con varias propiedades, se instancia e inicializa en el constructor y se le asigna al DataContext de esa misma clase (Ya sea página, control….). En la parte de diseño, se añaden dos controles TextBlock, y se realiza el enlace mediante Binding.

02  
Imagen 01 – Entidad Persona

03  
Imagen 02 – Instancia de la clase Persona, asignada a DataContext

04  
Imagen 03 – Enlazando los controles

Como se puede apreciar, en el segundo TextBlock no se especifica el atributo Path, ya que es el atributo por defecto y no hay ninguna necesidad de especificarlo explícitamente. Así por comodidad y facilitar la lectura de código xaml, lo más común es no encontrarlo escrito. Pero un Binding ofrece más funcionalidad que esta, con otros atributos para facilitar o añadir funcionalidad. Un atributo muy interesante es FallbackValue, que establecerá un valor constante al enlace cuando este no se pueda realizar (en caso de que no existe la propiedad a la que se enlaza, por ejemplo). No hay que confundir que el enlace no se pueda realizar, a que el valor enlazado sea nulo. En este último caso, el valor establecido para FallbackValue no se mostrará. StringFormat es un atributo que nos permitirá formatear el valor enlazado. Funciona prácticamente igual que el método Format  de la clase String.En el ejemplo que se muestra a continuación, los atributos citados están establecidos en enlaces de controles diferentes, aunque perfectamente se pueden combinar.

05  
Imagen 04 – Atributos FallbackValue y StringFormat

  • Enlace estático. Mediante este tipo de enlace se puede enlazar, valga la redundancia recursos estáticos. Estos recursos pueden estar definidos en cualquier nivel igual o superior al control al que se enlaza el dato, es decir, puede estar en el propio control o cualquiera de sus antecesores. Como ya se vio en la parte IV  con los estilos, al definir un recurso se añade a la propiedad Resources del control que se quiera que lo contenga. Para este ejemplo, se crea un recurso de tipo String con un valor establecido y una key para identificarlo. Además se añade otro recurso, un Converter, que se verá a continuación.

09  
Imagen 05 – Definición de recursos

Una vez creado, se utiliza la palabra reservada StaticResource y la Key para referenciar el recurso. En el ejemplo que se muestra a continuación, se utiliza un enlace estático para establecer la propiedadText de un TextBlock, y un converter para “pintar” un rectángulo de un color concreto.

06  
Imagen 06 – Controles con enlace estático

 

 

Un converter sirve, como su propio nombre indica, para convertir valores. En el ejemplo anterior, se puede ver cómo la propiedad Fill  del control Rectangle, de tipo Brush, esta enlazada a la propiedadEstado del DataContext, que es de tipo entero. Dado que son tipos diferentes, es necesario implementar un Converter para transformar los datos de origen, en el tipo destino. Simplemente hay que definir una clase, implementar la interfaz IValueConverter e implementar sus métodos. De momento será suficiente con el método Convert.

01  
Imagen 07 – Implementación de un converter

Para comprender el funcionamiento del método ConvertBack del Converter, hay que explicar los modos de enlace. Cuando se define el Binding, mediante el atributo Mode se puede establecer el funcionamiento de ese enlace. Existen tres modos, OneTime para que el enlace se realice una sola vez, OneWay para enlazar desde el origen al control (es el valor por defecto) y TwoWay para que se sincronice el origen y destino, dando la opción a que el usuario directamente actualice el origen de datos, sin tener que realizar ninguna implementación. Es por ello la existencia del métodoConvertBack, para hacer la conversión del valor del control enlazado al origen de datos.

  • El último tipo de enlace es el enlace a elemento. Es decir, en vez de establecer el origen de datos la propiedad DataContext, se hace un enlace a una propiedad de otro control existente. Es un Binding muy sencillo, simplemente se utiliza la palabra reservada ElementName para referirse al control origen.

07  
Imagen 08 – Enlace con ElementName

 

 

Si se ejecuta este último ejemplo, se obtiene un resultado similar al de la imagen.

08  
Imagen 09 – Resultado en el emulador

Hay algo a tener en cuenta en la clase entidad creada. Esa entidad solo implementa propiedades estándar, por lo que a pesar de tener creado el enlace a datos, no se notificará de cambios en los valores. Para que esto ocurra, la clase entidad Persona deberá heredar de DependencyObject , además será necesario definir las propiedades existentes como DependencyProperties.

Si quieres aprender más secretos, configuraciones, integraciones, desarrollo de PowerShell te recomendamos leer el libro de Pablo González y Ruben Alonso “PowerShell: La navaja suiza de los administradores de sistemas”.  Si quieres aprender mucho más sobre los secretos de lo sistemas Microsoft Windows, te recomendamos leer el libro de Sergio de los Santos “Máxima Seguridad en Windows: Secretos Técnicos  y, por último, te recordamos que si te ha gustado el artículo puedes suscribirte al Canal RSS de Windows Técnico  para estar al día de las novedades e información técnica de interés.

clip_image002

Comments are closed.