WPF绑定mvvm StackPanel

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

我是wpf的初学者,我遇到了stackpanel绑定问题。我必须动态生成标签,并将其添加到stackpanel。我在.cs文件中有以下代码:

    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

wpf xaml binding stackpanel
1个回答
3
投票

ItemTemplate是每个项目。所以只需指定一个标签。

<ItemsControl ItemsSource="{Binding Path=Labels}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Path=Value}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
© www.soinside.com 2019 - 2024. All rights reserved.