[SL] Maestro – Detalle y la propiedad IsSynchronizedWithCurrentItem

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *