2011-05-21 51 views
4

我有我想呈现的对象的集合。我怎样才能做到这一点?列表框会做,但每个对象都有很多我想要呈现的属性。我已经将列表框绑定到集合,并且列出了所有对象。我的问题是关于列表框的可视化,以及如果列表框是正确的东西要使用或有我应该使用的其他东西。如何在WPF中的列表框中显示对象的集合

回答

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

+0

如果您使用ListBox,设置ItemTemplate是一种方式,但当您使用ListView时肯定不行。ListViews具有视图功能,因此,如果要使用模板,它们应该在ListView.View中。还说ListViews支持列是非常不准确的,'GridViews'支持列,ListView通常只支持Views。进一步说你的代码不像你发布的那样工作,你可能打算把DataTemplate的内容包装到一个StackPanel中。 – 2011-05-21 22:41:13

0

您的对象集合可能被视为您的模型。 WPF中通常的做法是添加一个ViewModel,它将模型数据转换并显示为适合绑定的表单。根据你想要做什么,你的虚拟机可能会将每个对象格式化为一个字符串表示形式,然后将其作为ListBox可以绑定并显示的字符串集合公开。

+0

这个ViewModel是一个WPF的东西,或者它是一个通用的术语来向我解释我必须做什么。如果是这样,我明白你的意思,但是做到这一点的方法,只是用模板格式化列表框项目? – user579674 2011-05-21 16:33:00

+0

Model-View-ViewModel是在WPF中使用双向数据绑定的推荐设计模式。它整齐地分离了GUI,数据存储/检索包括业务规则和数据格式化/操作逻辑。 – 2011-05-21 16:34:54

+0

虽然使用MVVM是一个好主意,但是将集合中的项目转换为字符串只是让ListBox可以显示它而不是。它浪费空间,并且比使用'StringFormat'应用一些数据模板或绑定复杂得多。在最糟糕的情况下,可以使用'ValueConverter',但创建重复集合决不应该是一个选项。 – 2011-05-21 22:38:26

2

我发现现有的答案有点欠缺,通常不会处理集合或将它们的项目放到一个字符串中,最好的做法是使用CollectionView(例如排序,分组)进行一些动态操作,但通常您使用Data Templating来显示允许您使用其所有属性的单个项目。

而且有与集运行良好几个控件,首先你需要知道,如果你想选择的,如果不是ItemsControl是一个不错的选择,否则你应该使用ListBoxListView

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

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

相关问题