WPF集合的数据模板

4

我现在得低头认输了,因为我已经在Google上搜索了几个小时,但还是不知道自己做错了什么。

<DataTemplate DataType="{x:Type local:Controllers}">
    <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <TextBlock Text="{Binding Path=Port}" />
                </WrapPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</DataTemplate>

我想做的是在这个列表中显示任意数量的控制器对象。 "Controllers" 只是 "List<Controller>" 的一个别名。 "Port" 是每个 "Controller" 对象的属性,但是当然没有显示在列表中。项目已经被正确地添加到基于集合的列表上(实际上,该集合作为显示此对象集合的 ContentControl 的 Content 属性存储),但集合本身中的任何项目都没有被显示。
我最初认为这可能是更新问题-即集合在其初始空状态下被正确地显示,但事实并非如此;即使我从集合已经填充的状态开始,我仍然没有得到任何项目显示。
帮帮我,奥比旺。 :(

1
“Controllers”只是“List<Controller>”的别名,你是什么意思?你创建了一个继承自“List<Controller>”的“Controllers”类吗? - Nathan Hillyer
是的,那正是我的意思。不确定最好的表达方式是什么。抱歉。 :) - user1949917
发现我需要将整个东西绑定到可观察集合中,以便在添加和删除项时自动更新。 - user1949917
1个回答

3

您需要将某些内容绑定到ListBox上。这个内容只是{Binding},它引用了在运行时传递的DataTemplateDataType实例。

<DataTemplate DataType="{x:Type local:Controllers}">
    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <TextBlock Text="{Binding Path=Port}" />
                </WrapPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</DataTemplate>

很抱歉要说,将ItemsSource设置为绑定是不起作用的。实际上我之前已经尝试过了(当然,在阅读了您的评论后,我又尝试了一次!),但是无论如何,该框始终保持完全空白。可能还有其他我做错的事情导致它没有产生预期的效果吗? - user1949917
好的,Christoffer的答案是正确的:唯一的问题是,在没有某种更新的情况下,它不会显示列表中的新项目。 :) - user1949917

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接