2015-12-10 68 views
1

我試圖將項目(文本框和按鈕)動態添加到列表框中。c#在列表框中動態添加項目 - 未顯示項目

這是我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 s。

有什麼想法? 謝謝!

編輯: 如果我有

 <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> 

但儘管如此,似乎沒有什麼:(

+0

您將每個項目指定爲一個空的堆棧面板。 – chris

+0

是否有一個原因,你沒有使用MVVM和綁定來動態生成項目? – Dzyann

+0

嗡嗡聲,我試圖使用綁定,但它從來沒有顯示。 其實我想在我的類裏面創建按鈕,因爲在這個例子中沒有顯示更多的動作。 如何告訴堆疊面板創建2個按鈕? – F4Ke

回答

0

一個簡單的例子:

窗口.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而不是代碼。