Вопрос

У меня есть то, что, по моему мнению, должно быть простым двусторонним связыванием данных в настройке 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, поскольку элемент управления имеет собственную ссылку на данные. Возможно, это не является причиной вашей проблемы, но я бы порекомендовал просмотреть ваш программный код, чтобы убедиться, что переменная не создается повторно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top