动态创建ComboBox项,用数据填充它们并命名它们?

时间:2019-12-03 18:15:06

标签: c# wpf

我想检测一个目录中有多少个文件,然后使用该数字将相同数量的项目添加到ComboBox。但是,当我创建项目时,如何给每个项目取一个单独的名称? “添加”仅给该项目提供其内容,但我想给它一个x:Name。这是我到目前为止的内容:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    if (!File.Exists(@"C:\_Kooper Young FBLA\CIC=true.txt"))
    {
        int FileAmount = Directory.GetFiles(@"C:\_Kooper Young FBLA").Length;

        for (int i = 1; i < FileAmount + 1; i++)
        {
            ComboBox.Items.Add();
        }
    }

    File.Create(@"C:\_Kooper Young FBLA\CIC=true.txt");
}

2 个答案:

答案 0 :(得分:-1)

希望我能正确理解您的问题。您可以尝试为文件创建模型,无论它们代表什么。我说PersonModel,然后尝试ObservableCollection<PersonModel> People = new ObservableCollection<PersonModel>();

在PersonModel上,您将需要属性,以存储需要存储的有关Person之类的任何信息,例如Name

然后编写一个foreach循环,该循环查看目录中的每个项目,并为找到的每个项目创建一个PersonModel,并以某种方式设置Name属性。

最后,但仍在循环中,执行People.Add(item);

在Xaml中,将组合框的ItemsSource属性绑定到People集合。将组合框的DisplayMemberPath设置为Name

答案 1 :(得分:-1)

就像您在WPF中一样,我最好建议您在ComboBox中使用Binding

这是创建类ComboItem的简单方法:

public class ComboItem
{
    public string FileName { get; set; }    
}

因此,在您的代码中,您只需执行以下操作:

public ObservableCollection<ComboItem> ComboFiles { get; }
    = new ObservableCollection<ComboItem>();

foreach (var file in Directory.GetFiles(directoryName)) 
{
    ComboFiles.Add(new ComboItem { FileName = file });
}

,因此您可以填充ComboBox的列表。 然后在您的xaml中,您可以像这样绑定到ObservableCollection:

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=ComboFiles}" 
    SelectedItem="{Binding Path=SelectedFile}" DisplayMemberPath="FileName"/>

其中SelectedFile是ComboItem对象。

当然答案不是“关键”,但对绑定进行一些研究,我相信您会很快到达的,我只能告诉您link