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

问题描述 投票:0回答:2

我想检测一个目录中有多少个文件,然后使用该数字将相同数量的项目添加到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");
}
c# wpf
2个回答
-1
投票

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

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

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

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

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


-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

© www.soinside.com 2019 - 2024. All rights reserved.