Ciao a tutti,
la mia domanda a questo punto è molto semplice... spero che qualcuno mi dica almeno che non si può fare, così mi metto l'anima in pace, dopo una giornata passata fra tutorial e motori di ricerca!!!
Vorrei fare la stessa cosa, in Silverlight 4, utilizzando un ComboBox all'interno di un DataForm (preso dall'ULTIMA versione del Silverlight toolkit)...
Riesco a fare praticamente tutto, ma quando il DataForm si sposta nella sua collezione di record (con i pulsantini di navigazione) il ComboBox sovrascrive i valori del nuovo record relativamente al campo che ha in binding con quelli del record corrente... corrompendo irrimediabilmente i dati!
Cosa posso fare?
Ecco il pezzo di XAML (si trova in un DataTemplate all'interno delle risorse di pagina)
<toolkit:DataField PropertyPath="Responsabile">
<ComboBox HorizontalAlignment="Stretch" ItemsSource="{Binding Source={StaticResource ResponsabiliViewSource}}"
SelectedItem="{Binding Responsabile, Mode=TwoWay, Converter={StaticResource adapCodiceSoggetto}, ConverterParameter={StaticResource ResponsabiliViewSource}, NotifyOnValidationError=False}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Text="{Binding Cognome}" Margin="2"/>
<TextBlock VerticalAlignment="Center" Text="{Binding Nome}" Margin="2"/>
<TextBlock VerticalAlignment="Center" Margin="0" Text="(" />
<TextBlock VerticalAlignment="Center" Text="{Binding CodiceFiscale}" Margin="0"/>
<TextBlock VerticalAlignment="Center" Margin="0" Text=")" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</toolkit:DataField>
Più su, sempre nelle risorse:
<CollectionViewSource x:Name="ResponsabiliViewSource" />
<adapters:AdapterCodiceSoggetto x:Name="adapCodiceSoggetto" />
AdapterCodiceSoggetto è un IValueConverter che mi sono inventato che fa più o meno questo lavoro:
Public Class AdapterCodiceSoggetto
Inherits ViewModel.BindingAdapter(Of ServiceReference.Soggetto, Integer)
Public Overrides Function ConvertValueBack(ByVal theObject As ServiceReference.Soggetto) As Integer
If theObject Is Nothing Then _
Return 0
Return theObject.IDSoggetto
End Function
Public Overrides Function ConvertValue(ByVal theValue As Integer, ByVal lookupList As IEnumerable(Of ServiceReference.Soggetto)) As ServiceReference.Soggetto
Dim Result = (From r In lookupList Where r.IDSoggetto = theValue Take 1).FirstOrDefault()
Return Result
End Function
End Class
Aiutatemi, se potete!
Grazie di cuore!
Federico