在添加/删除项目时动态调整 ListView 高度?

Dynamically adjust ListView height on adding / removing items?

我有一个 3 级嵌套 ListView 绑定到相同的 3 级嵌套 Collection。 MainItems 添加到第 3 级。

未修改,所有层都有滚动条。在添加项目时,我编辑了 ListViewItem 的 Containing Grid 以动态调整高度。

我已成功删除 3 级滚动条。但是,我也想删除 2nd Level,我似乎做不到。

当我尝试调整 第一层 ListViewItem 的高度时,第一层的 滚动条消失了 但高度是根本没有调整。

我想做的是只有第一级上有滚动条并从那里滚动。

基本上是这样的:

这是我当前的代码:

<Grid x:Name="ParentGrid">
<ListView x:Name="Level1ListView" 
ItemsSource="{Binding Path=Level1}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="GridLevel1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <ToolKit_Controls:LayoutTransformControl Grid.Column="0">
                    <ToolKit_Controls:LayoutTransformControl.Transform>
                        <RotateTransform x:Name="rotateTransform" Angle="270"/>
                    </ToolKit_Controls:LayoutTransformControl.Transform>
                    <TextBlock Text="{Binding Path=Level1NameString}" FontSize="32" HorizontalAlignment="Center" />
                </ToolKit_Controls:LayoutTransformControl>
                <ListView x:Name="Level2ListView"
                        ItemsSource="{Binding Path=Level2}"
                      Grid.Column="1"
                      >
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Grid x:Name="GridLevel2">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto" />
                                    <RowDefinition Height="*" />
                                </Grid.RowDefinitions>
                                <Border BorderBrush="White" BorderThickness="1" Grid.Row="0"/>
                                <TextBlock Text='{Binding Path=Level2Name}' Foreground="Black" FontSize="18"
                                       Grid.Row="0"/>

                                <Grid x:Name="GridLevel3" Width="300" Height="100" Grid.Row="1">
                                    <ListView x:Name="ListView_Level3" IsSwipeEnabled="False"
                                    ManipulationMode="None"
                                          ItemsSource="{Binding Path=Level3DisplayCollection}"
                                                          Grid.Column="1">
                                        <ListView.ItemContainerTransitions>
                                            <TransitionCollection>
                                                <EntranceThemeTransition IsStaggeringEnabled="False" />
                                            </TransitionCollection>
                                        </ListView.ItemContainerTransitions>
                                    </ListView>
                                </Grid>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="1" ></WrapGrid>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

并添加了更改项目高度的重要代码:

var GridLevel1 = TypedAssociatedObject.GetAncestors().Where(a =>      a.Named("GridLevel1")).FirstOrDefault() as Grid;
//GridLevel1.Height = GridLevel1.ActualHeight + 50;

var GridLevel2 = TypedAssociatedObject.GetAncestors().Where(a => a.Named("GridLevel2")).FirstOrDefault() as Grid;
GridLevel2.Height = GridLevel2.ActualHeight + 50;

var GridLevel3 = TypedAssociatedObject.GetAncestors().Where(a => a.Named("GridLevel3")).FirstOrDefault() as Grid;
GridLevel3.Height = GridLevel3.ActualHeight + 50;

Level 1 被注释掉了,因为当我添加它时,虽然 2nd Scroll Bar 被移除 ListViewItem 高度没有改变,导致 UI错了,没有显示一切。您还注意到第一级滚动条保持相同的大小:

我想要的是 扩展 Header 1 的高度,这样一切仍然显示 右边的第一级滚动条是扩展/增长的。

谁能帮忙指出我做错了什么?

谢谢!

编辑:这是一个 Windows 商店应用。

在您的内部列表视图中将 ItemsPanel 设置为 StackPanel。这样您就不需要调整每个项目的高度。 还要隐藏滚动条使用 ScrollViewer.VerticalScrollBarVisibility="Hidden" on your inner list views.

您是否考虑过使用 grouping