2012-05-30 167 views
0

我是wpf的初學者,並且遇到了stackpanel綁定的問題。 我必須動態生成標籤,並將其添加到堆棧面板。 我已經按照.cs文件代碼:WPF綁定mvvm StackPanel

public DataImport() 
    { 
     labels.Add(new StringObject { Value = "tes" }); 
     labels.Add(new StringObject { Value = "tes2" }); 
     labels.Add(new StringObject { Value = "tes3" }); 
    } 
    private ObservableCollection<StringObject> labels = new ObservableCollection<StringObject>(); 

    public ObservableCollection<StringObject> Labels 
    { 
     get { return labels; } 
     private set 
     { 
      if (value == labels) return; 
      labels = value; 
      OnPropertyChanged("Labels"); 
     } 
    } 
    public class StringObject 
    { 
     public string Value { get; set; } 
    } 

下一頁XAML中我有:

<ItemsControl ItemsSource="{Binding Path=Labels}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Grid.Row="1" Height="237" HorizontalAlignment="Center" VerticalAlignment="Top" Width="186" FlowDirection="LeftToRight"> 
       <Label Content="{Binding Path=Value}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

真正的問題是,在XAML窗口,我看到的只是從標籤對象的第一要素。 你能告訴我我做錯了什麼嗎?

PS:我當然是一流的DataImport繼承了INotifyPropertyChanged的

+0

它看起來像你在你的ItemsControl中的每個項目創建一個StackPanel。是否有一個原因,你不只是一個列表框綁定到你的標籤集合? – AndrewS

+0

是的,我不能使用列表框,因爲這將從文件字段映射到數據庫文件。此標籤僅用於他將映射的用戶信息。 – Java

+0

@AndrewS我改變了我的XAML,它的工作原理。你是對的;)謝謝;) – Java

回答

2

ItemTemplate中是每個項目。所以只需指定一個標籤。

<ItemsControl ItemsSource="{Binding Path=Labels}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Label Content="{Binding Path=Value}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl>