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

C# 是否在添加/删除项目时动态调整ListView高度?,c#,wpf,listview,windows-store-apps,C#,Wpf,Listview,Windows Store Apps,我有一个绑定到同一个3级嵌套集合的3级嵌套ListView。主要项目在第三级添加 未经修改,所有级别上都有滚动条。在添加项目时,我编辑ListViewItem的包含网格的,以动态调整高度 我已成功删除第三级滚动条。但是,我也想删除第二级,这似乎是我做不到的 当我尝试调整第一级ListViewItem的高度时,第一级上的滚动条消失了,但高度根本没有调整 我想做的是只有在第一级上有滚动条,然后从那里滚动 基本上是这样的: 这是我当前的代码: <Grid x:Name="ParentGrid"

我有一个绑定到同一个3级嵌套集合的3级嵌套ListView。主要项目在第三级添加

未经修改,所有级别上都有滚动条。在添加项目时,我编辑ListViewItem的包含网格的,以动态调整高度

我已成功删除第三级滚动条。但是,我也想删除第二级,这似乎是我做不到的

当我尝试调整第一级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>
级别1被注释掉了,因为当我添加它时,尽管第二个滚动条被删除了,但是ListViewItem的高度没有改变,导致UI错误,没有显示所有内容。您还注意到,第一级滚动条的大小保持不变:

我想要的是扩展标题1的高度,以便所有内容仍然显示,右侧的第一级滚动条是扩展/增长的滚动条

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

谢谢大家!


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

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


您考虑过使用吗?

在我看来,您最好使用
TreeView
。对不起,我忘了提到这是一个Windows应用商店应用程序。不幸的是,treeview不可用,我想谢谢克里斯蒂安!删除ItemsPanel WrapGrid修复了第一级滚动条的问题!我尝试将ItemsPanel设置为StackPanel,并删除高度的动态添加,但似乎不起作用?我把它放在所有的列表视图上。发生的情况是,高度没有改变,尽管滚动条没有显示,但我仍然可以滚动到“查看”其他项目。我发现,高度=100或任何静态高度都会阻止StackPanel自动增大大小。
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;