【问题标题】:Accessing a control dynamically inside a ListView?在 ListView 中动态访问控件?
【发布时间】:2018-08-19 14:33:43
【问题描述】:

我想动态填充托管在 ListView 的 ViewCell 内的 TableView。目的是使控件可见或不可见,以允许用户分层浏览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 应该是恒定的时间。

【问题讨论】:

    标签: listview xamarin.forms treeview


    【解决方案1】:

    浏览 VisualTree 不是我想做的事。特别是因为它在每个平台上都有所不同。但是this discussion 可能会帮助您了解可视化树。

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

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

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

    祝你好运!

    【讨论】:

    • 感谢您的帮助。我无法预填充 TableView,因为基础数据会动态变化。你知道如何在运行时访问 TreeView 控件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多