我认为在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中消失。同样,如果我添加一个,它就不会出现。
是什么给出了?
答案 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;