自定义 ListView 无法从列表中删除项目
Custom ListView not able to remove item from list
我有两个自定义 listView,例如 ListView A 和 ListView B。当我在 ListView A 中单击项目时,ListView A 包含项目列表,它将在特定 item/data 正在填充到 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
我无法从列表视图中添加项目。
我想我已经找到了问题所在,尽管我不确定我是否正确理解了你的问题。
您正试图在此处删除一个新对象
ListItems.Remove(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID };
参照比较,最后没有去掉任何东西。
你应该
ListItems.Remove(ListItems.FirstOrDefault(i => i.ID == item.IDCodeID))
假设 IDCodeID 是您的对象的唯一标识符,如果不是,那么您可能应该考虑其他方式来获取对要删除的对象的引用
我有两个自定义 listView,例如 ListView A 和 ListView B。当我在 ListView A 中单击项目时,ListView A 包含项目列表,它将在特定 item/data 正在填充到 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
我无法从列表视图中添加项目。
我想我已经找到了问题所在,尽管我不确定我是否正确理解了你的问题。
您正试图在此处删除一个新对象
ListItems.Remove(new ListViewModel { Text = item.IDDescription + " (" + item.IDCodes + ")", ID = item.IDCodeID };
参照比较,最后没有去掉任何东西。
你应该
ListItems.Remove(ListItems.FirstOrDefault(i => i.ID == item.IDCodeID))
假设 IDCodeID 是您的对象的唯一标识符,如果不是,那么您可能应该考虑其他方式来获取对要删除的对象的引用