Imagen de avatar Tecnología .net con Visual Basic
Daniel Pérez

Propiedades Dependientes en WPF – Parte 1

¡Hola a toda la comunidad de ingenet!

Todos los programadores que hemos utilizado la programación orientada a objetos hemos utilizado los métodos, eventos y propiedades o atributos de un objeto de manera familiar.

Con la llegada de WPF las propiedades que veníamos utilizando al construir nuestros objetos ahora han cambiado por un nuevo concepto conocido como Propiedades Dependientes, que como diría un colega, vienen a ser algo así como las mismas propiedades, solo que con “esteroides”.

Las propiedades dependientes utilizan una forma más eficiente para persistirse en memoria, además de ofrecer ciertas carácterísticas nuevas como son la notificación de cambio en sus valores y la habilidad para heredar su valor hacia los elementos anidados en esta, y aunque son internamente distintas de las propiedades normales, la forma de leer y asignar valores a estas no cambian.

 Como se comportan las Propiedades Dependientes

Dado que en WPF todas las propiedades utilizan este nuevo esquema, podemos beneficiarnos de sus bondades de manera inmediata utilizándolas de la misma forma como hemos hecho con las propiedades normales.

Para ver algo de acción y menos rollo, vamos a hacer un ejemplo sencillo donde utilizaremos el valor de un control para actualizar una propiedad en específico de otro más, utilizando la caracteristica de enlace a datos de WPF en Visual Studio 2008:

  • Primeramente creamos un proyecto WPF: 
    Creando elproyecto

    Creando elproyecto

     

  • Activamos el panel de edición de XAML de la ventana creada automáticamente (Window1.xaml).
  • Ingresamos el siguiente código, el cual añade dos renglones al grid principal, colocando un control Image en el primero de ellos y un control Slider en el segundo:  
    Ventana Principal y única del proyecto

    Ventana Principal y única del proyecto

     

  • Arrastramos cualquier imagen que tengamos a la mano a la carpeta raíz de nuestro proyecto, en mi caso Tree.jpg: 
    Imagen Incluida en el proyecto

    Imagen Incluida en el proyecto

     

  • Ahora, en las propiedades Height y Width del control Image le indicamos que el valor lo va a obtener directamente del valor de la propiedad Value del control Slider, y establecemos otras propiedades mas de ambos controles:

 <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height=”*”/>
            <RowDefinition Height=”Auto” />
        </Grid.RowDefinitions>
        <Image Stretch=”Uniform” Width=”{Binding ElementName=sliTamañoImagen, Path=Value}”
Height=”{Binding ElementName=sliTamañoImagen, Path=Value}” Source=”Tree.jpg” />
        <Slider Name=”sliTamañoImagen” Grid.Row=”1″ Value=”200″ Maximum=”400″ Minimum=”50″ SmallChange=”5″ LargeChange=”50″ TickPlacement=”TopLeft” TickFrequency=”50″ />
    </Grid>

  • Finalmente ejecutamos el código con F5.

Del ejemplo anterior podemos observar que al mover la barra de desplazamiento del control Slider, automáticamente el control Image se da cuenta de que el valor de la propiedad Value del Slider ha cambiado y procede a actualizar a su vez el tamaño de la imagen desplegada.

Notamos que para enlazar el valor, tanto de la propiedad Height como de Width, empleamos una extensión de XAML, la cual se escribe entre llaves {} comenzando con la palabra Binding, con lo cual estamos creando una instancia de la clase System.Windows.Data.Binding, luego solo es necesario en este caso establecer el valor de dos propiedades: ElementName que indica el control fuente y Path que indica el nombre de la propiedad de la fuente.

Si replicaramos esta funcionalidad utilizando propiedades comunes en vez de propiedades dependientes, tendríamos que llevar a cabo manualmente la actualización de las propiedades Height y Width en el evento ValueChanged del control Slider.

Con este sencillo ejemplo se muestra la simplificación de código que se obtiene al usar las propiedades dependientes, y aunque esta es una forma muy frecuente de utilizarlas, hay casos donde lo que deseamos es actualizar una propiedad no a través de un cambio en el valor de otro control, sino al cambiar el valor de alguna propiedad de una clase que hayamos diseñado. Para esto debemos implementar en nuestra clase estas propiedades también como dependientes, si bien su uso es similar a las propiedades normales, su implementación no lo es, y esto lo mostraré en la siguiente parte de este artículo.

Espero sus comentarios, ¡y que los algorítmos les sean propicios!

Tags: , ,

Deja un comentario