【问题标题】:Can't iterate over ListView Items in Xamarin Forms无法迭代 Xamarin 表单中的 ListView 项目
【发布时间】:2018-03-20 18:43:30
【问题描述】:

当我写这段代码时:

ListView lv = new ListView();

foreach (ListViewDataItem item in lv.Items)
{

}

我收到“找不到类型或名称 ListViewDataItem

Items 在 lv 对象下也找不到。

基本上我需要遍历 ListView 的每一行并设置一个使用项目模板添加的复选框。

我怎样才能做到这一点?

【问题讨论】:

  • 您正在创建一个新的 ListView 但未填充项目,因此您无法遍历空列表。
  • 这个示例只是为了简单,但我真正的 ListView 有 2 个项目
  • 你试过 foreach (var item in lv) { } 吗?
  • C#“ListView”不包含“Items”的定义
  • LIstView 是一个数据绑定控件,因此如果要遍历其内容并对其进行修改,则应在绑定的 ItemsSource 上执行此操作,而不是在 ListView 控件本身上执行此操作

标签: c# listview xamarin xamarin.forms


【解决方案1】:

循环遍历列表视图的正确方法是访问它的 ItemsSource。然后,您可以将该项目投射到您的视图模型中并对其进行处理。

foreach (var item in lv.ItemsSource)
{
    // cast the item 
    var dataItem = (ListViewDataItem) item;

    // then do stuff with your casted item
    ...
}

【讨论】:

  • Xamarin Forms 中似乎不存在 ListViewDataItem:C# 找不到类型或命名空间名称(您是否缺少 using 指令或程序集引用?)
  • 这取决于您使用什么类(视图模型)为列表视图创建项目。我假设你的代码中的类是ListViewDataItem。如果您可以提供与您的列表视图相关的所有代码,这将很有用
  • @joseluisgonzalezclua 我认为 ListViewDataItem 将是您编写的自定义类
  • 这是更大的图景:我需要在每一行内创建一个带有复选框的列表视图,这应该是一个唯一的选择复选框,以便用户只能在 lilst 视图中选择一个。我试图在列表中迭代以将复选框设置为 true 或 false,一一设置。
  • 也许最好将您当前在 ListView(您的代码)中放置复选框的尝试包括在内,以便反映您对问题的实际意图
【解决方案2】:

我使用 for 循环遍历我的 listView ChildCount,将 var 作为 GetChildAt 的 Tag 分配为 ImageAdapterViewHolder,然后将我的复选框设置为 false。

class ImageAdapterViewHolder : Java.Lang.Object
{
    public ImageView SavedImage { get; set; }
    public TextView Description { get; set; }
    public CheckBox SelectImage { get; set; }

}

for (int i = 0; i < listView.ChildCount; i++)
{
    var row = listView.GetChildAt(i).Tag as ImageAdapterViewHolder;
    row.SelectImage.Checked = false;
}

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 2019-06-10
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多