C# 带有水平组的垂直ListView
我试图让ListView在同一行上显示具有相同属性的项目,以便绑定到C# 带有水平组的垂直ListView,c#,xaml,listview,uwp,uwp-xaml,C#,Xaml,Listview,Uwp,Uwp Xaml,我试图让ListView在同一行上显示具有相同属性的项目,以便绑定到项目的ListView(或其分组版本)定义如下: class Thing { public Thing(int num) { Num = num; } public int Num { get; set; } } List<Thing> Items = new List<Thing> { new Thing(1), new Thing(2), new Thing(4),
项目的ListView(或其分组版本)定义如下:
class Thing {
public Thing(int num) { Num = num; }
public int Num { get; set; }
}
List<Thing> Items = new List<Thing> {
new Thing(1), new Thing(2), new Thing(4),
new Thing(5), new Thing(3), new Thing(4),
new Thing(6), new Thing(4), new Thing(6),
new Thing(3)
};
<ListView ItemsSource="{x:Bind ItemsGrouped}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:ThingGroup>
<ListView ItemsSource="{x:Bind Items}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
感觉真的不对,我仍然无法将项目扩展到完全可用的宽度,因此我想找到一种使用单一列表视图和组的方法。您需要在这里解决两个问题
首先,您需要确保接收到的项目是按Num
分组的,以便可以轻松绑定。为此,我们可以使用Linq
创建i分组
列表。如下图所示
List<IGrouping<int, Thing>> FinalItems = Items
.OrderBy(a => a.Num)
.GroupBy(a => a.Num)
.ToList();
现在,对于需要基于子项拉伸项目的第二部分,有一个名为AdaptiveGridView
的控件,该控件基于可用的宽度拉伸项目
您可以在嵌套的ListView中使用它,以便项目可以根据子项目的数量进行拉伸
因此,您的XAML
将如下所示
<ListView x:Name="MainList" Margin="0,20">
<ListView.ItemTemplate>
<DataTemplate>
<Toolkit:AdaptiveGridView ItemsSource="{Binding ''}" DesiredWidth="100">
<GridView.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="2" >
<TextBlock Text="{Binding Num}" Margin="10,0" VerticalAlignment="Center"/>
</Border>
</DataTemplate>
</GridView.ItemTemplate>
</Toolkit:AdaptiveGridView>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
最终输出将是
可以找到完整的回购协议
祝你好运。你需要在这里解决两个问题
首先,您需要确保接收到的项目是按Num
分组的,以便可以轻松绑定。为此,我们可以使用Linq
创建i分组
列表。如下图所示
List<IGrouping<int, Thing>> FinalItems = Items
.OrderBy(a => a.Num)
.GroupBy(a => a.Num)
.ToList();
现在,对于需要基于子项拉伸项目的第二部分,有一个名为AdaptiveGridView
的控件,该控件基于可用的宽度拉伸项目
您可以在嵌套的ListView中使用它,以便项目可以根据子项目的数量进行拉伸
因此,您的XAML
将如下所示
<ListView x:Name="MainList" Margin="0,20">
<ListView.ItemTemplate>
<DataTemplate>
<Toolkit:AdaptiveGridView ItemsSource="{Binding ''}" DesiredWidth="100">
<GridView.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="2" >
<TextBlock Text="{Binding Num}" Margin="10,0" VerticalAlignment="Center"/>
</Border>
</DataTemplate>
</GridView.ItemTemplate>
</Toolkit:AdaptiveGridView>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
最终输出将是
可以找到完整的回购协议
祝你好运