WPF ListBox не обновляется с помощью ItemsSource - PullRequest
9 голосов
/ 17 июня 2009

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

Что дает?

Ответы [ 2 ]

19 голосов
/ 17 июня 2009

Ваш m_VariableList реализует INotifyCollectionChanged ? Если это не ObservableCollection, изменения в его содержимом не будут автоматически отражаться в пользовательском интерфейсе.

8 голосов
/ 17 июня 2009

Проблема не в том XAML, который вы предоставили. Я успешно использовал тот же XAML в тестовом приложении; однако я смог воспроизвести проблему, с которой вы столкнулись, повторно создав переменную m_VariableList.

Когда m_VariableList присваивается новый экземпляр или указывается на новый объект, он не отражается в ListBox, поскольку элемент управления имеет собственную ссылку на данные. Возможно, это не является причиной вашей проблемы, но я бы порекомендовал просмотреть ваш программный код, чтобы убедиться, что переменная не создается повторно.

...