2009-06-16 20 views
9

Ho quello che credo dovrebbe essere un semplice collegamento bidirezionale nell'impostazione WPF, ma la listbox (destinazione) non si aggiorna quando la collezione cambia.WBox ListBox non si aggiorna con l'ItemSource

Sto installando questo ItemsSource della ListBox di programmazione:

lstVariable_Selected.ItemsSource = m_VariableList; 

E la ListBox è dichiarato come segue:

  <ListBox Margin="5" Name="lstVariable_Selected"> 
       <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Border BorderBrush="Gray" BorderThickness="1" Margin="0"> 
         <TextBlock FontSize="25" Text="{Binding Path=Name}" /> 
        </Border> 
       </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

Quando ho inizialmente impostato l'ItemsSource, ListBox (che non è visibile al momento) ottiene i suoi elementi impostati. Tuttavia, se vado a vedere la ListBox, gli aggiornamenti sembrano fermarsi a quel punto.

Posso quindi rimuovere un elemento dalla raccolta m_VariableList e non scompare dal ListBox. Allo stesso modo, se aggiungo uno, non appare.

Cosa dà?

+1

Si prega di inviare il codice che si utilizza per associare ItemSource a m_VariableList. – micahtan

risposta

18

La tua m_VariableList sta implementando INotifyCollectionChanged? Se non è ObservableCollection, le modifiche ai contenuti non si rifletteranno automaticamente nell'interfaccia utente.

+0

È un BindingList , che secondo Rocky (http://forums.lhotka.net/forums/thread/17402.aspx) funziona con WPF e WinForms, mentre INotifyCollectionChanged è solo WPF. –

+0

Se implementa IBindingList, funzionerà allo stesso modo. C'è qualcos'altro che non è evidente da quello che hai descritto come funzionerà. – rmoore

+0

Si scopre che l'implementazione sottostante è cambiata (a mia insaputa) e non stava più implementando IBindingList quando pensavo che lo fosse. Morale: verifica le tue (mie) ipotesi. –

8

Il problema non è nello XAML che hai fornito. Ho usato lo stesso XAML con successo in un'applicazione di test; tuttavia, sono stato in grado di replicare il problema che stai riscontrando reistanziando la variabile m_VariableList.

Quando a m_VariableList viene assegnata una nuova istanza o si punta a un nuovo oggetto, non viene riflesso in ListBox perché il controllo ha il proprio riferimento ai dati. Questo potrebbe non essere la causa del tuo problema, ma ti consiglio di guardare oltre il code-behind per assicurarti che la variabile non venga riattivata.

+0

Grazie, Tony. Sono stato speleologo per cercare di capire dove la raccolta potrebbe essere stata riattivata quando ho scoperto che la classe base era cambiata. –

Problemi correlati