由於某些原因,我必須在代碼後面初始化ListBox項目,原因太複雜了。如何在代碼後面創建ListBoxItem
在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,另一個是> 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
}
在仔細檢查Output之後,我發現了錯誤的地方。我的問題,謝謝。 – 2010-08-19 03:11:04