使用GridViewColumn创建ListView

3

我已经为这个问题奋斗了相当长的时间,我需要一些专家的帮助来获得我想要的结果。这是我的列表视图与网格视图列绑定lstPerson源和其DataMember到Gender和Name所显示的结果。

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或后台代码实现这一点吗?

иҜ·й—®GetPersonInformation()еҮҪж•°е®һйҷ…дёҠжҳҜеҒҡд»Җд№Ҳзҡ„пјҹ :) - Picrofo Software
@Picrofo EGY -- 如上所述...从我的人员表中选择性别和姓名,按性别排序,只获取名字(第一个)。 - user1884032
从你的“我想要”的输出中并不清楚你实际上希望在布局方面发生什么。如果只有两个男性,那么在“男性”下只应该有一列,还是应该有两行和两列,并在右下角留有一个空单元格?“男性”始终在左边很重要吗?如果第三个“未知”的性别出现了,那它会在哪里?用户可以点击“女性”并选择它吗?当选择“Gabriel”并按右箭头键时会发生什么?第六个女性会出现在第五列的右侧还是现有女性的下方? - Ryan Cavanaugh
@RyanCavanaugh -- 所以列的最大值为4。如果第一列的行数等于3,则我想要它继续创建第二列,有另外3个行,创建下一列有三个行,直到列等于4。只是一个例子。但更具体地说,如果只有1个男性,则只会有一列,有两行(男性,约翰)。这讲得通吗? - user1884032
2个回答

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>

谢谢你让我走上了正确的轨道,但我该如何为它添加类别(男性,女性)呢? - user1884032
这取决于你想要什么。只需编辑 ListView.ItemTemplate 并在其中添加任何你喜欢的内容即可。例如,你可以在那里添加另一个用于类别的 TextBlock - icebat
如果你看一下我在你的帖子里做的事情,我正在为每个项目获取性别。我只想让它在我发布的结果中显示一次。 - user1884032
如果您需要按性别分开的项目,最好使用两个 ListViews。创建两个 List<Person> 并绑定它们(可以使用 LINQ 进行创建:GetPersonInformation().Where(p => p.Gender=="Female") 或者类似的方式)。 - icebat

0
你需要一个已排序的列表 - 就是这样!
<ListBox x:Name="lbPeoples" ScrollViewer.VerticalalScrollBarVisibility="Disabled" ItemsSource="{Binding Path=Peoples}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Vertical" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

位置:ListBox 高度 = 3 * 项高度,ListBox 宽度 = 4 * 项宽度

Peoples[0] = 男性,Peoples[6] = 女性

不是很好的方法 - 但简单!


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