Introducción
Estoy dando mis primeros pasos en el mundo de WPF y Silverlight. Empece por WPF donde y ahora estoy intentando migrar los ejemplos que he creado en WPF a Silverlight y me he encontrado el siguiente problema:
“Establecer la propiedad IsSynchronizedWithCurrentItem a True provoca una excepción.”
En WPF este problema no sucede así que hable con el crack de SL (Josue Yeray) y vi la ayuda de MSDN, donde dicen:
Obtiene o establece un valor que indica si Selector debe mantener la propiedad SelectedItem sincronizada con el elemento actual en la propiedad Items.
Campo identificador de la propiedad de dependencia: IsSynchronizedWithCurrentItemProperty
Establecer la propiedad IsSynchronizedWithCurrentItem en true producirá una excepción.
Lo que pretendía conseguir es un Listbox y que en unas cajas de Texto mostrase el valor del elemento seleccionado.
Para conseguirlo en WPF podríamos utilizar un código como el siguiente:
1: <ListBox x:Name="Productos" Grid.Row="1" Grid.Column="1" IsSynchronizedWithCurrentItem="True"
2: ItemsSource="{Binding lProductos}">
3: <ListBox.ItemTemplate>
4: <DataTemplate>
5: <Grid>
6: <Grid.ColumnDefinitions>
7: <ColumnDefinition/>
8: </Grid.ColumnDefinitions>
9: <Label Content="{Binding Path=Nombre}"/>
10: </Grid>
11: </DataTemplate>
12: </ListBox.ItemTemplate>
13: </ListBox>
14: <StackPanel Grid.Row="1" Grid.Column="2">
15: <Label Content="Producto"/>
16: <TextBlock Text="{Binding CurrentItem.Nombre}" Height="26" />
17: <Label Content="Unidades"/>
18: <TextBlock Text="{Binding CurrentItem.Unidades}" Height="26" />
19: <Label Content="Precio"/>
20: <TextBlock x:Name="txtPrecio" Text="{Binding CurrentItem.Precio}" Height="26" />
21: </StackPanel>
Solución para SilverLight
En vista de no poder utilizar la propiedad indicada, vamos a enlazar los Textos a la propiedad SelectedItem del ListBox:
1: <ListBox Grid.Column="0" x:Name="listadoActividades" ItemsSource="{Binding Actividades}">
2: <ListBox.ItemTemplate>
3: <DataTemplate>
4: <Grid>
5: <Grid.RowDefinitions>
6: <RowDefinition/>
7: </Grid.RowDefinitions>
8: <Grid.ColumnDefinitions>
9: <ColumnDefinition/>
10: <ColumnDefinition/>
11: <ColumnDefinition/>
12: </Grid.ColumnDefinitions>
13: <TextBlock Grid.Column="0" Text="{Binding AC_Codi}"/>
14: <TextBlock Grid.Column="1" Text="{Binding AC_Descripcion}"/>
15: <TextBlock Grid.Column="2" Text="{Binding AC_Tipo}"/>
16: </Grid>
17: </DataTemplate>
18: </ListBox.ItemTemplate>
19: </ListBox>
20: <StackPanel Grid.Column="1">
21: <TextBlock Text="Codigo"/>
22: <TextBox Text="{Binding ElementName=listadoActividades, Path=SelectedItem.AC_Codi}"
23: IsEnabled="False"/>
24: <TextBlock Text="Descripción"/>
25: <TextBox Text="{Binding ElementName=listadoActividades,
26: Path=SelectedItem.AC_Descripcion, Mode=TwoWay}"/>
27: <TextBlock Text="Tipo de Actividad"/>
28: <TextBox Text="{Binding ElementName=listadoActividades,
29: Path=SelectedItem.AC_Tipo, Mode=TwoWay}"/>
30: </StackPanel>
Bueno espero que os sea de utilidad.
Saludos.