Categorías destacadas
programacion php    
Artículo
1
¡votar!

 MultiBinding en WPF

Vamos a fijarnos en el capítulo anterior sobre como enlazar enumeraciones a un ComboBox, si recordáis poníamos el Nombre, primer Apellido y Segundo Apellido en la lista de tres TextBox agrupados en un StackPanel.

Esto no es lo mejor, lo bueno sería enlazar las tres propiedades a un solo TextBox, para ello utilizaremos el MultiBinding de WPF.

La clase MultiBinding describe una colección de objetos Binding asociados a una sola propiedad de destino de enlace. MultiBinding permite enlazar una propiedad del destino de enlace a una lista de propiedades de origen y, a continuación, aplicar la lógica para generar un valor con las entradas indicadas. En su momento ya vimos el post de Converter de WPF, ahora necesitamos la interfaz IMultiValueConverter , que proporciona una forma de aplicar la lógica personalizada a una clase MultiBinding, esta interfaz tiene los mismos metodos que la interfaz IValueConverter: Convert y ConvertBack, solo que en este caso si nos fijamos en las firmas.

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 


Podemos observar que la diferencia esta en el primer parámetro que acepta en este caso un array de objects con los valores a enlazar.

En este caso nos quedaría

public class NombreConverter : IMultiValueConverter 
{ 
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
{ 
//Convertimos a Nombre Apellido 1 Apellido2 
return values[0].ToString() + " " + values[1].ToString() + " " + values[2].ToString(); 
} 
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
{ 
throw new NotImplementedException(); 
} 
} 


El Xaml en este caso seria
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" Grid.Column="0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="0,0,5,0" >
<TextBlock.Text>
<MultiBinding Converter="{StaticResource Convertidor}">
<Binding Path="Nombre"/>
<Binding Path="Apellido1"/>
<Binding Path="Apellido2"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
<TextBlock Text="{Binding Practico}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Es importante ver que el orden que pongamos en el Xaml será el orden que tenga en el array values de la función Convert.

La aplicación podéis ver que quedaría igual que el anterior

MultiBinding en WPF

Autor del artículo: Oscar Álvarez Guerras
   
Publicado por:
Angel Carrero
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon