2009-06-16 19 views
9

Tengo lo que creo que debería ser un enlace de datos bidireccional simple en la configuración de WPF, pero el listbox (objetivo) no se actualiza a medida que cambia la colección.WPF ListBox no se actualiza con ItemsSource

Soy la creación de este ItemsSource del cuadro de lista mediante programación:

lstVariable_Selected.ItemsSource = m_VariableList; 

Y el cuadro de lista se declara como sigue:

  <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> 

Al principio, cuando me puse la ItemsSource, el cuadro de lista (que no es visible en el momento) obtiene sus elementos establecidos. Sin embargo, si voy a ver el ListBox, las actualizaciones parecen detenerse en ese punto.

Puedo eliminar un elemento de la colección m_VariableList y no desaparecerá del ListBox. Del mismo modo, si agrego uno, no aparece.

¿Qué ofrece?

+1

Publique el código que utiliza para vincular ItemSource a m_VariableList. – micahtan

Respuesta

18

¿Es su m_VariableList la implementación de INotifyCollectionChanged? Si no se trata de una ObservableCollection, los cambios en su contenido no se reflejarán automáticamente en la IU.

+0

Es una BindingList , que según Rocky (http://forums.lhotka.net/forums/thread/17402.aspx) funciona tanto con WPF como con WinForms, mientras que INotifyCollectionChanged es solo WPF. –

+0

Si implementa IBindingList, funcionará de la misma manera. Está sucediendo algo más que no es evidente por lo que has descrito ya que funcionará. – rmoore

+0

Resulta que la implementación subyacente había cambiado (sin que yo sepa) y ya no estaba implementando IBindingList cuando pensé que era. Moral: verifique sus (mi) suposiciones. –

8

El problema no está en el XAML que ha proporcionado. Utilicé el mismo XAML con éxito en una aplicación de prueba; sin embargo, pude replicar el problema que está experimentando al volver a crear la instancia de la variable m_VariableList.

Cuando m_VariableList recibe una nueva instancia o apunta a un nuevo objeto, no se refleja en el ListBox porque el control tiene su propia referencia a los datos. Puede que esta no sea la causa de su problema, pero le recomiendo que revise su código subyacente para asegurarse de que la variable no se vuelva a crear una instancia.

+0

Gracias, Tony. Fui de espeleología para tratar de averiguar dónde podría haber estado volviendo a crear la colección cuando descubrí que la clase base había cambiado. –

Cuestiones relacionadas