Как создать ListBoxItem внутри кода позади - PullRequest
2 голосов
/ 18 августа 2010

По какой-то причине я должен инициализировать элементы ListBox за кодом, причина слишком сложна, чтобы сказать.

LoadFamily () вызывается во время отображения WPF UserControl.

public void LoadFamily()
{
    DataTemplate listItemTemplate = this.FindResource("ManDataTemplate") as DataTemplate;

    foreach (Person man in family)
    {
        ListBoxItem item = new ListBoxItem();

        item.DataContext = man;
        item.ContentTemplate = listItemTemplate;
        // other initialize for item object
        this.ActivityList.Items.Add(item);
    }
}

В моем файле xmal я определяю шаблон данных.

<DataTemplate x:Key="ManDataTemplate" DataType="{x:Type local:Person}">
    <TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>

Но ListBox содержит только пустой текстовый блок, имя человека не отображается. Я не знаю почему, может быть, привязка данных неправильная, но как это сделать за кодом.

Спасибо за любую помощь! (WPF 3.5 или 4.0)

//////////////////////////////////////////// /////////////////

Спасибо за вашу помощь. Я нашел, где я был не прав. Я не должен добавлять ListBoxItem в ActivityList.Items, один - UIElement, другой -> DataCollection. Это две разные вещи.

Я должен изменить код следующим образом:

foreach (Person man in family)
{
    this.ActivityList.Items.Add(man);
    ListBoxItem item = this.ActivityList.ItemContainerGenerator.ContainerFromItem(man) as ListBoxItem;
    item.ContentTemplate = listItemTemplate;
    // other initialize for item object
}

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Я не вижу преимущества создания списков элементов вручную. Просто установите ItemsSource в списке для списка людей (семьи).

0 голосов
/ 18 августа 2010

Может быть ошибка привязки. Вот почему текстовый блок пуст. Проверьте окно вывода VisualStudio, оно будет отображать ошибки привязки, если они существуют.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...