【问题标题】:how to add multiple items into ItemsSource WPF multiple collection binding?如何将多个项目添加到 ItemsSource WPF 多集合绑定中?
【发布时间】: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&lt;string&gt;代替List&lt;string&gt;,它实现了INotifyCollectionChanged接口。它没有AddRange,所以需要一个一个添加项目
  • 您只创建一次folders,从那时起您只更改该列表中的项目,因此imageItems.ItemsSource = folders 没有效果,因为它仍然是同一个列表。如果您不重新创建列表,则需要列出当集合中的项目发生更改时通知 UI 的列表,ObsevableCollection&lt;T&gt; 正是这样做的
  • 感谢您的回答:)

标签: c# wpf data-binding listbox wpf-controls


【解决方案1】:

您需要创建一个可以更改的列表以将您的文件名存储在:

ObservableCollection<string> folders = new ObservableCollection<string>();

从那里,您可以添加和删除您想要的所有项目:

imageItems.ItemsSource = folders;

foreach (string file in Directory.EnumerateFiles(@"C:\Users\images1", "*.*"))
{
    folders.Add(file);
}

foreach (string file in Directory.EnumerateFiles(@"C:\Users\images2", "*.*"))
{
    folders.Add(file);
}

【讨论】:

  • 是的,我也这样做了,但如果两者是分开的,它就不起作用:(文件已添加但未显示。更新的问题
  • 我的错误,你需要使用 ObservableCollection 来代替。我会更新我的答案。此外,您只需要设置一次 ItemsSource。
  • ToList() 在 foreach 语句中不是必需的。我已经编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2011-03-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
相关资源
最近更新 更多