Silverlight 4 Nuevas Características – StringFormat DataBinding
El Databinding de esta nueva versión se parece cada vez mas al databinding de WPF siendo cada vez mas potente. En las versiones anteriores vimos que si queríamos formatear una fecha o un decimal debíamos utilizar converters de los que ya hable en este post. En esta versión se ha implementado la propiedad StringFormat en los Binding.
Imaginemos que tenemos la clase Persona
1: public class Persona
2: {
3: public string Nombre { get; set; }
4: public string Apellidos { get; set; }
5: public DateTime FechaNacimiento { get; set; }
6: public string CorreoElectronico { get; set; }
7: public string Direccion { get; set; }
8: }
Ahora el Xaml en el que mostramos los datos sería
1: <Grid x:Name="LayoutRoot" Background="White" Height="160" VerticalAlignment="Top" Width="320">
2: <Grid.ColumnDefinitions>
3: <ColumnDefinition></ColumnDefinition>
4: <ColumnDefinition></ColumnDefinition>
5: </Grid.ColumnDefinitions>
6: <Grid.RowDefinitions>
7: <RowDefinition></RowDefinition>
8: <RowDefinition></RowDefinition>
9: <RowDefinition></RowDefinition>
10: <RowDefinition></RowDefinition>
11: <RowDefinition></RowDefinition>
12: <RowDefinition></RowDefinition>
13: </Grid.RowDefinitions>
14:
15: <TextBlock x:Name="FirstNameTextBlock" Grid.Row="0" Grid.Column="0" Text="Nombre:" FontWeight="Bold">
16: </TextBlock>
17: <TextBlock x:Name="FirstNameValueTextBlock" Grid.Row="0" Grid.Column="1" Text="{Binding Nombre}" ></TextBlock>
18: <TextBlock x:Name="LastNameTextBlock" Grid.Row="1" Grid.Column="0" Text="Apellidos:" FontWeight="Bold"></TextBlock>
19: <TextBlock x:Name="LastNameValueTextBlock" Grid.Row="1" Grid.Column="1" Text="{Binding Apellidos}"></TextBlock>
20: <TextBlock x:Name="AddressTextBlock" Grid.Row="3" Grid.Column="0" Text="Direccion:" FontWeight="Bold"></TextBlock>
21: <TextBlock x:Name="AddressValueTextBlock" Grid.Row="3" Grid.Column="1" Text="{Binding Direccion, TargetNullValue=Desconocida}" ></TextBlock>
22: <TextBlock x:Name="BirthDateTextBlock" Grid.Row="2" Grid.Column="0" Text="Fecha Nacimiento:" FontWeight="Bold"></TextBlock>
23: <TextBlock x:Name="BirthDateValueTextBlock" Grid.Row="2" Grid.Column="1" Text="{Binding FechaNacimiento, StringFormat=dd/MM/yyyy}"></TextBlock>
24: <TextBlock x:Name="EmailTextBlock" Grid.Row="4" Grid.Column="0" Text="Email:" FontWeight="Bold"></TextBlock>
25: <TextBlock x:Name="EmailValueTextBlock" Grid.Row="4" Grid.Column="1" Text="{Binding CorreoElectronico}"></TextBlock>
26: </Grid>
Si os fijáis en el Binding de Fecha Nacimiento podéis ver que la fecha tiene el formato de dd/MM/yyyy evitándonos el converter, además también podeos ver en el binding de dirección que cuando sea nulo se muestre la palabra Desconocida
Solo nos queda el código c# para el binding
1: public MainPage()
2: {
3: InitializeComponent();
4: Persona p = new Persona
5: {
6: Nombre = "Oscar",
7: Apellidos = "Alvarez Guerras",
8: FechaNacimiento = new DateTime(1971, 6, 29),
9: CorreoElectronico = "bialguos@gmail.com"
10: };
11: DataContext = p;
12: }
El resultado
