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
El Databinding de esta nueva versión se parece cada vez mas al databinding de WPF siendo cada vez mas
Ya era hora que pusieran esa funcionalidad 🙂 Silverlight va cogiendo forma…