出于某种原因,我必须在后面的代码中初始化ListBox项目,原因太复杂了。
在WPF UserControl显示期间调用LoadFamily()。
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。
<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,另一个是&gt; 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
}
答案 0 :(得分:1)
我没有看到手动创建listboxitems的好处。只需将列表框的ItemsSource设置为person(family)列表。
答案 1 :(得分:0)
可能存在绑定错误。这就是文本块为空的原因。检查VisualStudio的“输出”窗口,如果存在,将显示绑定错误。
HTH