在ListView中动态访问控件?

时间:2018-03-11 13:33:50

标签: listview xamarin.forms treeview

我想动态填充一个ListView,它存放在ListView的ViewCell中。目的是使控件可见或不可见,以允许用户分层浏览ListView。因此,当用户点击ListView条目时,我将动态填充TableView并使其可见以呈现子视图

但是如何在当前选定行的ListView的ViewCell中找到当前的topicTableView控件?

    <ListView x:Name="categoryListView" ItemsSource="{Binding CategoryViewModels}"
          HasUnevenRows="True"
          Margin="20,40"
          ItemTapped="CatagoryListView_OnItemTapped">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout Orientation="Vertical">
                    <Label
                        Margin="0,20"
                        Text="{Binding Name}"/>
                    <TableView
                        x:Name="topicTableView"
                        HasUnevenRows="True"
                        IsVisible="True"/>
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

This是我发现解决这个问题的最接近的东西,但它讨论了使用ListBox而不是ListView的解决方案。它使用VisualTreeHelper遍历控件树,但由于我只对当前选定的行感兴趣,因此找到生成的TreeView应该是恒定的时间。

1 个答案:

答案 0 :(得分:0)

浏览VisualTree不是我会做的事情。特别是因为每个平台有点不同。但是this discussion可以帮助您走可视树。

如果可能的话,我会选择按照需要的方式填充TableView,而不是在用户点击项目时填充。

您仍然可以动态地使TableView(In)可见。这可以通过将IsVisible属性绑定到CategoryViewModel上的IsTableViewVisible属性来实现。当用户点击该项时,您可以在集合中查找其ViewModel并翻转它的IsTableViewVisible属性(确保为该属性调用RaisePropertyChanged())。

请务必阅读这两个链接,因为您最终会得到一个包含uneven rowsruntime resizing rows的ListView。

祝你好运!