Databinding e convertitori WPF
-
05-07-2019 - |
Domanda
Sto cercando di collegarmi a una casella di riepilogo in questo modo:
<ListBox x:Name="MyListBox" Margin="0,0,0,65">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource MyConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Il motivo per cui sono vincolante per l'intero oggetto e non per una proprietà è perché il mio convertitore avrà bisogno di più proprietà dell'oggetto per costruire la stringa che restituisce.
Funziona e la mia stringa viene restituita. Ma poi, quando cambio ObservableCollection, questo si basa sul valore che non cambia sullo schermo. Se mi associo a una sola proprietà e la cambio, il valore cambia.
Cosa posso fare diversamente? Non riesco a collegarmi a una singola proprietà poiché ho bisogno dell'intero oggetto nel convertitore ... E ConverterParameter è già in uso.
Soluzione
Ricorda, se ti leghi a " main " e il valore della proprietà principale stessa non viene modificato, l'associazione non avrà motivo di aggiornarsi. Non ha idea che il convertitore sia effettivamente basato su una sotto-proprietà. Quello che puoi fare è utilizzare un MultiBinding dove vincoli non solo il "principale" proprietà, ma anche una sotto-proprietà specifica. Ciò consente a IMultiValueConverter di accedere all'implementazione oggetto dati principale, ma poiché stai vincolando anche la sotto-proprietà che sta cambiando, verrà aggiornata anche quando il valore di quella sotto-proprietà cambia.
Altri suggerimenti
Puoi provare a utilizzare un MultiBinding che credo venga aggiornato ogni volta che viene attivato uno qualsiasi dei suoi Binding. Puoi anche utilizzare un IMultiValueConverter o solo sfruttare il StringFormat dell'associazione.