Artículo
|
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.
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
El Xaml en este caso seria
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
Autor del artículo: Oscar Álvarez Guerras
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

Autor del artículo: Oscar Álvarez Guerras
![]() |
Publicado por: Angel Carrero |
|
|
Comentarios
Últimas noticias
· factura
Últimos artículos














































