По какой-то причине я должен инициализировать элементы 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
}