自定义ListView无法从列表中删除项目

时间:2018-06-29 09:49:53

标签: listview xamarin.forms listviewitem

我有两个自定义的listView,如ListView A和ListViewB。在ListView A上包含项目列表,当我单击ListView A中的项目时,它将在特定项目/数据上突出显示(即选中和取消选中)。 ListView B它工作正常。但是,当我取消选中ListView A中的项目并尝试以类似方式尝试从ListView B中删除该项目时,则无法正常工作。

从带有复选框的自定义ListView中删除项目时,不从ListView中删除项目。但我可以添加该项目,但无法删除。

在特定条件下,我试图在列表中添加或删除项目的ListView控件的onitemtap事件。

public class TestIds
 {
   ObservableCollection<ListViewModel> ListItems { get; set; } = new ObservableCollection<ListViewModel>()
     {
     };

  private void ListView_ItemTappedEventArgs(ItemTappedEventArgs itemTapped)
    {
       items = itemTapped.Item as ListViewModel;
       if (items.IsSelected)
          {
            items.IsSelected = false;
            BindRemoveItem(items.ID, items.IsSelected);
           }
           else
            {
             items.IsSelected = true;
             BindRemoveItem(items.ID, items.IsSelected);
             }
     }

    //this is my code for binding and removing data from listView

  private void BindRemoveItem(string id, bool isChecked)
    {
      IDManager.GetIDList(list =>
        {
         foreach (IDEntities item in list)
          {
           if (isChecked == true)
            {
             ListItems.Add(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID });
             }
             else
             {
               ListItems.Remove(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID };
              }
            }
        CustomControlClass.ListView.ItemsSource = ListItems;
        }, id);
     }                  
}

在这里ListItems.Remove我不能从列表视图中列出项目。

1 个答案:

答案 0 :(得分:2)

尽管我不确定我是否正确理解了您的问题,但我想我已经找到了问题。

您正在尝试在此处删除新对象

ListItems.Remove(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID };

比较是通过引用进行的,最后没有删除任何内容。

您应该这样做

ListItems.Remove(ListItems.FirstOrDefault(i => i.ID == item.IDCodeID))

假设IDCodeID是对象的唯一标识符,否则,您可能应该考虑采用其他方法来获取对要删除的对象的引用