WPF ListBox没有使用ItemsSource更新

时间:2009-06-16 20:41:42

标签: c# .net wpf data-binding listbox

我认为在WPF设置中应该是简单的双向数据绑定,但是当集合发生变化时,列表框(目标)不会更新。

我正在以编程方式设置ListBox的ItemsSource:

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中消失。同样,如果我添加一个,它就不会出现。

是什么给出了?

3 个答案:

答案 0 :(得分:19)

您的m_VariableList是否正在实施INotifyCollectionChanged?如果它不是ObservableCollection,那么对其内容的更改将不会自动反映在UI中。

答案 1 :(得分:8)

问题不在于您提供的XAML中。我在测试应用程序中成功使用了相同的XAML;但是,我能够通过重新实例化m_VariableList变量来复制您遇到的问题。

当给m_VariableList一个新实例或指向一个新对象时,它不会反映在ListBox中,因为该控件有自己的数据引用。这可能不是您的问题的原因,但我建议您查看代码隐藏以确保变量未被重新实例化。

答案 2 :(得分:0)

我被困了一个多小时,然后简单的逻辑解决了这个问题 只需将itemsource设置为清除列表,然后再次设置您需要的源

lstVariable_Selected.ItemsSource = new List<Object>();
lstVariable_Selected.ItemsSource = m_VariableList;