【发布时间】:2016-01-01 17:24:09
【问题描述】:
我已将单个项目添加到 ItemsSource 这是一个文件夹路径,所有图像都将添加到 ListBox 但我想使用相同的 ItemsSource 将更多项目添加到现有 ListBox 中怎么做?
List<string> folders = new List<string>();
private void ComboBox1_Loaded(object sender, RoutedEventArgs e)
{
folders.AddRange(Directory.EnumerateFiles(@"C:\Users\images1", "*.*").ToList());
imageItems.ItemsSource = folders;
}
private void ComboBox2_Loaded(object sender, RoutedEventArgs e)
{
folders.AddRange(Directory.EnumerateFiles(@"C:\Users\images2", "*.*").ToList());
imageItems.ItemsSource = folders;
}
<ListBox x:Name="imageItems" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" Width="120" Height="120"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
但只有ComboBox2_Loaded 项目被添加和显示,而不是ComboBox1_Loaded
我怎样才能得到这两个项目?
【问题讨论】:
-
使用
ObsevableCollection<string>代替List<string>,它实现了INotifyCollectionChanged接口。它没有AddRange,所以需要一个一个添加项目 -
您只创建一次
folders,从那时起您只更改该列表中的项目,因此imageItems.ItemsSource = folders没有效果,因为它仍然是同一个列表。如果您不重新创建列表,则需要列出当集合中的项目发生更改时通知 UI 的列表,ObsevableCollection<T>正是这样做的 -
感谢您的回答:)
标签: c# wpf data-binding listbox wpf-controls