如何在WPF中的列表框中显示对象的集合
我有我想呈现的对象的集合。我怎样才能做到这一点?列表框会做,但每个对象都有很多我想要呈现的属性。我已经将列表框绑定到集合,并且列出了所有对象。我的问题是关于列表框的可视化,以及如果列表框是正确的东西要使用或有我应该使用的其他东西。如何在WPF中的列表框中显示对象的集合
您可能需要考虑使用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>
这个例子假设你的对象具有的属性Title
和ShouldCheck
。
您的对象集合可能被视为您的模型。 WPF中通常的做法是添加一个ViewModel,它将模型数据转换并显示为适合绑定的表单。根据你想要做什么,你的虚拟机可能会将每个对象格式化为一个字符串表示形式,然后将其作为ListBox可以绑定并显示的字符串集合公开。
这个ViewModel是一个WPF的东西,或者它是一个通用的术语来向我解释我必须做什么。如果是这样,我明白你的意思,但是做到这一点的方法,只是用模板格式化列表框项目? – user579674 2011-05-21 16:33:00
Model-View-ViewModel是在WPF中使用双向数据绑定的推荐设计模式。它整齐地分离了GUI,数据存储/检索包括业务规则和数据格式化/操作逻辑。 – 2011-05-21 16:34:54
虽然使用MVVM是一个好主意,但是将集合中的项目转换为字符串只是让ListBox可以显示它而不是。它浪费空间,并且比使用'StringFormat'应用一些数据模板或绑定复杂得多。在最糟糕的情况下,可以使用'ValueConverter',但创建重复集合决不应该是一个选项。 – 2011-05-21 22:38:26
我发现现有的答案有点欠缺,通常不会处理集合或将它们的项目放到一个字符串中,最好的做法是使用CollectionView
(例如排序,分组)进行一些动态操作,但通常您使用Data Templating来显示允许您使用其所有属性的单个项目。
而且有与集运行良好几个控件,首先你需要知道,如果你想选择的,如果不是ItemsControl
是一个不错的选择,否则你应该使用ListBox
或ListView
。
如果您的对象有不同的视图,通常会使用ListViews。详细信息视图和缩略图视图。您可以使用ListView.View
进行此操作,框架中有一个现有视图,即GridView
,它提供了一些列。 Matthew Ferreira建议的正是你不应该用ListView做的事情,因为你想让模板依赖于当前视图,事实上代码甚至不能编译,因为DataTemplate
只能有一个孩子。
ListViews应该在视图中封装视图逻辑,以便可以随意更改。如果您决定使用ItemsControl
或ListBox
,那么设置ItemTemplate
就是您想要的。阅读我链接到的数据模板概述,这是一个很好的起点。
如果您使用ListBox,设置ItemTemplate是一种方式,但当您使用ListView时肯定不行。ListViews具有视图功能,因此,如果要使用模板,它们应该在ListView.View中。还说ListViews支持列是非常不准确的,'GridViews'支持列,ListView通常只支持Views。进一步说你的代码不像你发布的那样工作,你可能打算把DataTemplate的内容包装到一个StackPanel中。 – 2011-05-21 22:41:13