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

自定义ListView无法从列表中删除项,listview,xamarin.forms,listviewitem,Listview,Xamarin.forms,Listviewitem,我有两个自定义listView,如listView A和listView B。在listView A上,当我在listView A中单击项目时,它将在特定项目上突出显示(即选中和取消选中),数据将填充到listView B中,它工作正常。但当我从ListView A中取消选中项,并以类似的方式尝试从ListView B中删除该项时,它就不起作用了 使用复选框从自定义列表视图中删除项目时,不从列表视图中删除项目。但我可以添加该项目,但无法删除 在我尝试从列表中添加或删除项目的特定条件下,ListV

我有两个自定义listView,如listView A和listView B。在listView A上,当我在listView A中单击项目时,它将在特定项目上突出显示(即选中和取消选中),数据将填充到listView B中,它工作正常。但当我从ListView A中取消选中项,并以类似的方式尝试从ListView B中删除该项时,它就不起作用了

使用复选框从自定义列表视图中删除项目时,不从列表视图中删除项目。但我可以添加该项目,但无法删除

在我尝试从列表中添加或删除项目的特定条件下,ListView控件的OnItemAP事件

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);
     }                  
}
公共类测试
{
ObservableCollection ListItems{get;set;}=new ObservableCollection()
{
};
私有无效列表视图_ItemTappedEventArgs(ItemTappedEventArgs itemtaped)
{
items=itemTapped.Itemas ListViewModel;
如果(项目.已选定)
{
items.IsSelected=false;
BindRemoveItem(items.ID,items.IsSelected);
}
其他的
{
items.IsSelected=true;
BindRemoveItem(items.ID,items.IsSelected);
}
}
//这是我用于绑定和从listView中删除数据的代码
私有void bindremovietem(字符串id,布尔值已检查)
{
IDManager.GetIDList(列表=>
{
foreach(列表中的标识项)
{
如果(isChecked==true)
{
添加(新ListViewModel{Text=item.IDDescription+”(“+item.IDCodes+”),ID=item.IDCodeID});
}
其他的
{
移除(新ListViewModel{Text=item.IDDescription+”(“+item.IDCodes+”),ID=item.IDCodeID};
}
}
CustomControlClass.ListView.ItemsSource=ListItems;
},id);
}                  
}

此处
ListItems。删除
我无法从listview中删除项目。

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

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

ListItems.Remove(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID };
比较是通过引用进行的,最终没有任何内容被删除

相反,你应该这样做

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

这是假设IDCODEID是对象的唯一标识符,如果不是,那么你应该考虑其他方法来获取对要删除的对象的引用

我想我已经发现了这个问题,虽然我不确定是否正确地理解了你的问题。 您正在尝试删除此处的新对象

ListItems.Remove(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID };
比较是通过引用进行的,最终没有任何内容被删除

相反,你应该这样做

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

这是假设IDCODEID是对象的唯一标识符,如果不是,那么您应该考虑其他方法来获取对要删除的对象的引用< /p>任何答复……在此回答中……