Vanguarsoft Developers blog

Ing. Javier Leal -Desarrollador CPANAX C.A / Microsoft Student Partners – VENEZUELA

Binding Convirtiendo boolean a Visibility en Silverlight

1 comentario

i i Hola amigos me tope con este problema en uno de mis desarrollos y quisiera compartirlo, Muchos saben que hay propiedades a la cual requerimos hacerle un Binding pero no es posible debido a que no es de tipo dependecyProperty, es decir, no es una propiedad de dependencia por lo tanto no se le puede hacer un Binding en el Caso de la propiedad Visibility presente y todos los objetos visuales se puede utilizar un Bool para lorar esta funcionalidad.

1.- Lo primero es crear un nuevo proyecto y crearemos un nueva clase con el nombre que tu desees, en mi caso le colocare BoolToVisibitity y agregamos el siguiente codigo.

using System.Windows.Data;

using System;

using System.Windows;

 

namespace UtilidadesDemo.Tools

{

    public class BoolToVisibitity : IValueConverter

    {

 

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

        {

            bool visibility = (bool)value;

            return visibility ? Visibility.Visible : Visibility.Collapsed;

        }

 

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

        {

            Visibility visibility = (Visibility)value;

            return (visibility == Visibility.Visible);

        }

    }

}

Esta clase como ven implementa la interfaz con metodos como convert y ConverBlack para el caso contrario de convertir de Visibility a bool, a pesar que visibility tiene 3 valores el toma como true Visible y Como Flase Collapsed.

2.- Como segundo paso Instanciomos el Namespace Utilizado en la clase anterior y agregamos al Resourse de la pagina donde deseas hacer la conversion agregando un Key.

<UserControl.Resources>

    <Utils:BoolToVisibitity x:Key="ConvertBoolToVisibility"/>

</UserControl.Resources>

Si deseas tambien puedes agregarlo en el App de namera de que este disponible para toda la aplicacion.

3.- Como ejemplo Agregaremos el ViewModel de MainPage, Agreremos un Boton y un RadionButton, en El ViewModel Agregamos una Propiedad Bool Llamada IsVisible.

private bool _isVisible;

public bool IsVisible

{

    get { return _isVisible; }

    set { _isVisible = value; RaisePropertyChanged("IsVisible"); }

}

4.- Agrega el Codigo XAML Binding a la propiedad visibiliti de esta forma

<Button Content="Visible" Grid.Column="1"  Margin="50" Name="button1" Visibility="{Binding Path=IsVisible, Converter={StaticResource ConvertBoolToVisibility}}" />

Aca el codigo completo de la pantalla resaltando puntos importante para la implementacion de este codigo.

<UserControl x:Class="UtilidadesDemo.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:Utils="clr-namespace:UtilidadesDemo.Tools"

             xmlns:base="clr-namespace:UtilidadesDemo"

    mc:Ignorable="d"

    d:DesignHeight="300" d:DesignWidth="400">

    <UserControl.Resources>

        <Utils:BoolToVisibitity x:Key="ConvertBoolToVisibility"/>

    </UserControl.Resources>

    <UserControl.DataContext>

        <base:MainPageViewModel/>

    </UserControl.DataContext>

        <Grid x:Name="LayoutRoot" Background="White">

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="79*" />

            <ColumnDefinition Width="321*" />

        </Grid.ColumnDefinitions>

        <Button Content="Visible" Grid.Column="1"  Margin="50" Name="button1" Visibility="{Binding Path=IsVisible, Converter={StaticResource ConvertBoolToVisibility}}" />

        <CheckBox Content="Visible" IsChecked="{Binding Path=IsVisible, Mode=TwoWay}"/>

    </Grid>

</UserControl>

Resultados.

image

image

Espero que les sea de mucha utilidad.

Autor: Ing. Javier J. Leal H.

Desarrollador en CPANAX C.A, Microsoft Student Partners de Venezuela Amantes de nuevas Tecnologías Desarrollador es Silverlight 5, Windows 8, Windows Phone, Influenciador y Orador en Actividades Tecnológicas Microsoft

Un pensamiento en “Binding Convirtiendo boolean a Visibility en Silverlight

  1. Pingback: Agenda de la Comunidad « MSExpertos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s