C# 带有水平组的垂直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在同一行上显示具有相同属性的项目,以便绑定到
项目的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>

最终输出将是

可以找到完整的回购协议

祝你好运