如何在WPF的列表框中显示对象集合

时间:2011-05-21 16:24:08

标签: wpf listbox observablecollection

我想要呈现一组对象。我怎样才能做到这一点?列表框可以,但每个对象都有许多我想要呈现的属性。我已经将一个列表框绑定到一个集合,我列出了所有的对象。我的问题是关于列表框的可视化以及列表框是否正确使用或者我应该使用其他东西。

3 个答案:

答案 0 :(得分:2)

我发现现有的答案有点缺乏,通常一个人不会处理集合或将其项目简化为一个字符串,最好你会使用CollectionView进行一些动态操作(例如排序,分组),但通常使用Data Templating来显示允许您使用其所有属性的各个项目。

此外,有几个控件适用于集合,首先你需要知道你是否想要选择,如果不是ItemsControl是一个不错的选择,否则你应该使用ListBox或{{ 3}}

如果您对对象有不同的视图,通常会使用ListViews,例如:详细信息视图和缩略图视图。您可以使用ListView,框架中有一个现有视图ListView.View,它提供了列。 Matthew Ferreira所建议的正是你不应该对ListView做什么,因为你想让模板依赖于当前视图,事实上代码甚至没有编译,因为DataTemplate只能有一个孩子。

ListViews应该在视图中封装视图逻辑,以便可以随意更改。如果您决定使用ItemsControlListBox,那么设置GridView就是您想要做的。阅读我链接到的数据模板概述,它是一个很好的起点。

答案 1 :(得分:0)

您的对象集合可能被视为您的模型。 WPF中通常的做法是添加一个 ViewModel ,它将模型数据转换并公开为适合绑定的形式。根据您的要求,您的VM可以例如将每个对象格式化为字符串表示形式,然后将其作为Listbox可以绑定和显示的字符串集合公开。

答案 2 :(得分:0)

您可能需要考虑使用ListView控件。如果您计划从对象中显示多个属性,ListView会支持列。您可以使用ItemTemplate属性格式化对象的显示。例如:

<ListView ItemsSource="{Binding Path=myObjectCollection}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Title}"/>
            <CheckBox IsChecked="{Binding Path=ShouldCheck}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

此示例假定您的对象具有属性TitleShouldCheck