WPF ListBox n'est pas mis à jour avec ItemsSource
J'ai ce que je pense qui devrait être simple à deux sens de la liaison de données dans WPF l'installation, mais la zone de liste (cible) n'est pas mise à jour que la collecte des changements.
Je suis la définition de cette ItemsSource de la zone de liste par programmation:
lstVariable_Selected.ItemsSource = m_VariableList;
Et de la zone de liste est déclarée comme suit:
<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>
Quand j'ai d'abord définir la ItemsSource, la zone de liste (qui n'est pas visible à l'époque) obtient ses éléments. Cependant, si je vais afficher la zone de liste, les mises à jour semblent s'arrêter à ce point.
Je peux ensuite supprimer un élément de la m_VariableList collection, et il ne disparaît pas de la ListBox. De même, si j'en ajouter un, il n'apparaît pas.
Ce qui donne?
source d'informationauteur Paul Prewett
Vous devez vous connecter pour publier un commentaire.
Est votre m_VariableList la mise en œuvre de INotifyCollectionChanged? Si ce n'est pas une ObservableCollection, puis des modifications du contenu ne sera pas automatiquement répercutées dans l'INTERFACE utilisateur.
Le problème n'est pas dans le code XAML que vous avez fournis. J'ai utilisé le même code XAML avec succès dans une application de test; cependant, j'ai été en mesure de reproduire le problème que vous rencontrez par la reprise de l'instanciation de la m_VariableList variable.
Lorsque le m_VariableList est donné une nouvelle instance, ou en pointe d'un nouvel objet, il n'est pas reflétée dans la zone de liste parce que le contrôle a sa propre référence aux données. Cela peut ne pas être la cause de votre problème, mais je recommande de regarder par dessus votre code-behind pour s'assurer que la variable n'est pas prise en re-instancié.