Связывание WPF mvvm StackPanel

Я новичок в wpf, и у меня проблема с привязкой к стековой панели. Мне нужно динамически генерировать метки и добавлять их в 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


person Java    schedule 30.05.2012    source источник
comment
Похоже, вы создаете одну StackPanel для каждого элемента в ItemsControl. Есть ли причина, по которой вы не просто привязываете ListBox к своей коллекции Labels?   -  person AndrewS    schedule 31.05.2012
comment
Да, я не могу использовать ListBox, потому что это будет отображение полей файлов в файлы базы данных. Эти метки предназначены только для информации пользователя о том, что он будет отображать.   -  person Java    schedule 31.05.2012
comment
@AndrewS Я меняю свой xaml, и он работает. Вы были правы;) Спасибо;)   -  person Java    schedule 31.05.2012


Ответы (1)


ItemTemplate для каждого элемента. Так что просто укажите метку.

<ItemsControl ItemsSource="{Binding Path=Labels}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Path=Value}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
person Emond Erno    schedule 31.05.2012