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

时间:2015-12-10 16:27:41

标签: c# wpf listbox

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

这是我的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>

但是,仍然没有出现:(

1 个答案:

答案 0 :(得分:0)

一个简单的例子:

Window.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而不是代码。