WPF ListBox не обновляется с помощью ItemsSource
-
05-07-2019 - |
Вопрос
У меня есть то, что, по моему мнению, должно быть простым двусторонним связыванием данных в настройке WPF, но список (цель) не обновляется при изменении коллекции.
Я устанавливаю этот ItemsSource в ListBox программно:
lstVariable_Selected.ItemsSource = m_VariableList;
И ListBox объявлен следующим образом:
<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>
Когда я первоначально установил ItemsSource, ListBox (который не виден в то время) получает свои элементы установленными. Тем не менее, если я перейду к списку ListBox, обновления, похоже, на этом остановятся.
Затем я могу удалить элемент из коллекции m_VariableList, и он не исчезнет из ListBox. Точно так же, если я добавлю один, он не появится.
Что дает?
Решение
Ваш m_VariableList реализует INotifyCollectionChanged ? Если это не ObservableCollection, изменения в его содержимом не будут автоматически отражаться в пользовательском интерфейсе.
Другие советы
Проблема не в предоставленном вами XAML. Я успешно использовал тот же XAML в тестовом приложении; однако я смог воспроизвести проблему, с которой вы столкнулись, путем создания экземпляра переменной m_VariableList.
Когда m_VariableList присваивается новый экземпляр или указывается на новый объект, он не отражается в ListBox, поскольку элемент управления имеет собственную ссылку на данные. Возможно, это не является причиной вашей проблемы, но я бы порекомендовал просмотреть ваш программный код, чтобы убедиться, что переменная не создается повторно.