Pau*_*ett 9 .net c# data-binding wpf listbox
我认为在WPF设置中应该是简单的双向数据绑定,但是当集合发生变化时,列表框(目标)不会更新.
我正在以编程方式设置ListBox的ItemsSource:
lstVariable_Selected.ItemsSource = m_VariableList;
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
当我最初设置ItemsSource时,ListBox(当时不可见)获取其项目集.但是,如果我查看ListBox,那么更新似乎就此停止了.
然后我可以从m_VariableList集合中删除一个项目,它不会从ListBox中消失.同样,如果我添加一个,它就不会出现.
是什么赋予了?
rmo*_*ore 19
你的m_VariableList是否实现了INotifyCollectionChanged?如果它不是ObservableCollection,则对其内容的更改不会自动反映在UI中.
问题不在于您提供的XAML中.我在测试应用程序中成功使用了相同的XAML; 但是,我能够通过重新实例化m_VariableList变量来复制您遇到的问题.
当m_VariableList被赋予一个新实例或指向一个新对象时,它不会反映在ListBox中,因为该控件有自己的数据引用.这可能不是您的问题的原因,但我建议查看您的代码隐藏以确保变量未被重新实例化.
小智 5
我被困了一个多小时,然后简单的逻辑解决了这个问题只需将 itemsource 设置为清除列表,然后再次设置你需要的源
lstVariable_Selected.ItemsSource = new List<Object>();
lstVariable_Selected.ItemsSource = m_VariableList;
Run Code Online (Sandbox Code Playgroud)