c#在列表框中动态添加项目-项目未显示

本文关键字:项目 显示 添加 动态 列表 | 更新日期: 2023-09-27 18:26:18

我正在尝试将项目(文本框和按钮)动态添加到列表框中。

这是我的xaml:

<ListBox x:Name="projects_list" Height="459" Canvas.Left="20" Canvas.Top="86" Width="755">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Height="42">
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

而且,在StackPanel中,我想要我的2个按钮。

foreach中,我创建了如下按钮:

items.ForEach(delegate (Projects project)
{
    Button txt = new Button(); // NAME
    txt.Height = 32;
    txt.Width = 320;
    txt.Content = project.name;
    Button gen_token = new Button(); 
    gen_token.Height = 26;
    gen_token.Width = 180;
    gen_token.Content = "Generate";
    this.projects_list.Items.Add(txt); 
    this.projects_list.Items.Add(gen_token);  
}

但是,当我将这些元素添加到我的ListBox中时,什么也不会出现。尽管如此,在我的列表中还是有很多StackPanel

知道吗?谢谢

编辑:如果我有

      <Button Content="{Binding}" ></Button>

stackPanel中,我的按钮正在显示,但实际上没有。我想,它们是stackpanel中的一个,我希望每个面板上都有两个按钮。。

第2版:所以,我尝试了这个:

        public List<Dictionary<string, Button>> Items { get; set; }
        ....
        Items = new List<Dictionary<string, Button>>();
        DataContext = this;

稍后在each

         Dictionary<string, Button> dict = new Dictionary<string, Button>() { { "name", txt }, { "token", gen_token } };
                Items.Add(dict);

所以在我的xaml中,我有:

            <ListBox x:Name="projects_list" Height="459" Canvas.Left="20" Canvas.Top="86" Width="755" ItemsSource="{Binding Items}"  >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" Height="42">
                        <Button Content="{Binding Path=name}" ></Button>
                        <Button Content="{Binding Path=token}" ></Button>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

但是,什么也没有出现:(

c#在列表框中动态添加项目-项目未显示

一个快速示例:

窗口.Xaml

  <ListBox ItemsSource="{Binding Items}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Button Content="{Binding}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

背后的代码

public partial class MainWindow : Window
{
    public ObservableCollection<string> Items { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        Items = new ObservableCollection<string> { "Item 1", "Item2" };
        DataContext = this;
    }
}

这只是一个给你一个想法的快速例子。您可能会执行ViewModel,而不是代码隐藏。