我想动态填充一个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应该是恒定的时间。
答案 0 :(得分:0)
浏览VisualTree不是我会做的事情。特别是因为每个平台有点不同。但是this discussion可以帮助您走可视树。
如果可能的话,我会选择按照需要的方式填充TableView,而不是在用户点击项目时填充。
您仍然可以动态地使TableView(In)可见。这可以通过将IsVisible
属性绑定到CategoryViewModel上的IsTableViewVisible
属性来实现。当用户点击该项时,您可以在集合中查找其ViewModel并翻转它的IsTableViewVisible
属性(确保为该属性调用RaisePropertyChanged()
)。
请务必阅读这两个链接,因为您最终会得到一个包含uneven rows和runtime resizing rows的ListView。
祝你好运!