gpt4 book ai didi

listview - Xamarin.Forms:获取 ListView 的所有单元格/项目

转载 作者:行者123 更新时间:2023-12-04 16:25:42 24 4
gpt4 key购买 nike

我想对 ListView 中显示的所有单元格进行一些更改.因此,我想获取所有单元格或项目。例如。

this.listView.ItemSource.Items

上述代码中的项目不存在。此外,我在 ListView 上没有找到任何选项。或 ItemSource ,可以做到这一点。是否可以获得所有单元格/项目?如果不是,我还必须在加载单元格后更改哪些其他选项?例如。用于更改文本或布局。

最佳答案

我可能迟到了,但这是使用 System.Reflection 的另一种方法。无论如何,我建议仅在无法进行数据绑定(bind)的情况下使用它,并将其作为最后的选择。

对于给定的 ListView

<ListView x:Name="connectionsListView" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" ItemSelected="OnConnectionSelect">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell Height="40">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<customs:MyViewClass Grid.Column="0"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Footer>
<ContentView />
</ListView.Footer>
</ListView>

您可以通过抓取“TemplatedItems”属性来爬取 ListView,
将其转换到 ITemplatedItemsList<Cell>并遍历您的( View )单元格。

IEnumerable<PropertyInfo> pInfos = (connectionsListView as ItemsView<Cell>).GetType().GetRuntimeProperties();
var templatedItems = pInfos.FirstOrDefault(info => info.Name == "TemplatedItems");
if (templatedItems != null)
{
var cells = templatedItems.GetValue(connectionsListView);
foreach (ViewCell cell in cells as Xamarin.Forms.ITemplatedItemsList<Xamarin.Forms.Cell>)
{
if (cell.BindingContext != null && cell.BindingContext is MyModelClass)
{
MyViewClass target = (cell.View as Grid).Children.OfType<MyViewClass>().FirstOrDefault();
if (target != null)
{
//do whatever you want to do with your item...
}
}
}
}

更新:
既然被问到, if (cell.BindingContext != null && cell.BindingContext is MyModelClass) 基本上是防止访问不存在的 View 的保护措施,例如,如果尚未填充 ListView。

如果不需要检查 BindingContext 是否是特定模型类,则将行减少到
if (cell.BindingContext != null)

关于listview - Xamarin.Forms:获取 ListView 的所有单元格/项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com