salve,
sono alle prese con il databinding di WPF e in particolare ho la necessità di effettuare il binding su una lista di oggetti Customer, che hanno tra le altre una proprietà di tipo Address che a sua volta espone una serie di proprietà tra cui City.
Quindi:
Customer
Id
Name
Address
Street
City
Email
...
nello XAML ho definito la listbox in questo modo:
<ListBox ItemsSource="{Binding Customers}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Id:" />
<TextBlock Text="{Binding Id}" />
<TextBlock Text="Name:" />
<TextBlock Text="{Binding Name}" />
<TextBlock Text="City:" />
<TextBlock Text="{Binding Address, Path=Address.City}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Le proprietà Id e Name vengono correttamente visualizzate nella lista al contrario della proprietà City che nonostante sia correttamente valorizzata nei vari oggetti Customer non viene mostrata nella listbox.
Inutile dire che ho cercato in rete e ho provato diverse combinazioni nella definizione del binding senza successo
Hai provato molto semplicemente:
<TextBlock Text="{Binding Path=Address.City}" />
?
si è una delle prove che ho fatto... ma purtroppo non va bene.
Nel post iniziale ho omesso di dire che la collection Customers è esposta dal ViewModel che è associato al DataContext della View... ma credo che non sia un'informazione fondamentale
Puoi mandarmi o postare la classe Customer e Address nella loro interezza? A volte sono schiocchezze che un occhio esterno vede con più facilità...
Intanto controlla la console perchè wpf non da errrori di binding però li scrive sulla console!
Infatti...
ho controllato l'output e ho visto che era un banalissimo errore di digitazione che mi ha fatto perdere un bel po' di tempo.
Scusatemi
Figurati, mi dai la possibilità proprio di dirlo: il principale e unico vero problema del binding di wpf in fase di progettazione è proprio il dover digitare le proprietà senza avere la possibilità di alcun controllo da parte del compilatore. A noi in azienda è successo così spesso che ormai non mi alzo proprio quando uno dei tirocinanti chiede come mai non funziona il binding, dico semplicemente:
1. Controlla che il nome della proprietà "esposta" e quello che hai digitato nel Path coincida
2. Se stai settando un valore selezionato, tipo il SelectedItem, controlla che il tipo esposto coincida con il tipo dell'elenco.
Fino ad oggi ho risparmiato di alzarmi almeno un decina di volte al giorno...
Per qualsiasi costa, non ti fare problemi, posta pure!
Associazione Culturale DotNetCampania - C.F.: 95127870632