2012-12-07 35 views
3

我一直在对付这个问题很长一段时间,我需要一些专家帮助来获得我想要的结果。这里是我的listview与gridviewcolumn看起来像通过绑定源为lstPerson和它的DataMember性别和名称的结果。使用GridViewColumn创建ListView

Person类:

private int ID { get; set; } 
private string Gender { get; set; } 
private string FName { get; set; } 

List<Person> lstPerson = GetPersonInformation(); 
//select Gender, FirstName From Person Order By Gender 

ListView结果:

John 
Mike 
Gabriel 
Kevin 
Peter 
Stacy 
Jen 
Lily 
Lisa 
Vivian 

上面的不是我想要显示的内容。如果我想要上述内容,这很容易做到。下面的结果是我想要实现的...对于这个例子,最多4列和最多3行...每3行,创建一个3行的列,直到达到4列。

Male  Gabriel  Female  Lily 
John  Kevin  Stacy  Lisa 
Mike  Peter  Jen  Vivian 

有没有人知道我可以通过XAML或代码背后实现?

+0

请问您可以提供什么'GetPersonInformation()'实际上做什么? :) –

+0

@Profrofo EGY - 如上面张贴的那样...选择Gender,Name From Person Order By Gender ...只需从我的人物表中获取fname(第一个)和性别,然后按性别排序。 – user1884032

+0

从你的“我想要的”输出中不清楚你实际上想要在布局方面发生什么。如果只有两名男性,那么在“男性”下面应该只有一列,还是应该在右下角有两行两列的空单元格? '男'总是在左边是重要的吗?如果出现第三个“未知”性别,那么该去哪里?用户是否可以点击“女性”并选择它?当'Gabriel'被选中并且用户点击右箭头键时会发生什么?第六位女性会在第五列右边显示,还是低于现有女性? –

回答

0

你可以尝试用ItemsPanelTemplate玩:

<ListView> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Width="200" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Margin="5 0" Text="{Binding FName}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

如果您需要的4列,即使名称很长,您可以使用UniformGrid,而不是WrapPanel

<ItemsPanelTemplate> 
    <UniformGrid Columns="4" /> 
</ItemsPanelTemplate> 
+0

感谢您在正确的轨道上,但我会如何添加像它的类别(男,女)? – user1884032

+0

这取决于你想要什么。只需编辑'ListView.ItemTemplate'并添加任何你喜欢的东西。例如,您可以在其中添加另一个“TextBlock”。 – icebat

+0

如果你看看我在你的文章中做了什么,我会为每个项目获取性别。我只希望它根据我发布的结果显示一次,我希望看到。 – user1884032

0

你需要rightsorted列表 - 这就是全部!

<ListBox x:Name="lbPeoples" ScrollViewer.VerticalalScrollBarVisibility="Disabled" ItemsSource="{Binding Path=Peoples}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Vertical" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

其中:列表框高度= 3 * Item_Height,列表框宽度= 4名* Item_Width

人民[0] =男,万众[6] =女人 -

不是好办法 - 但简单!