如何在代码后面创建ListBoxItem

时间:2010-08-18 09:32:13

标签: c# wpf

出于某种原因,我必须在后面的代码中初始化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
}

2 个答案:

答案 0 :(得分:1)

我没有看到手动创建listboxitems的好处。只需将列表框的ItemsSource设置为person(family)列表。

答案 1 :(得分:0)

可能存在绑定错误。这就是文本块为空的原因。检查VisualStudio的“输出”窗口,如果存在,将显示绑定错误。

HTH