我正在使用 Xamarin 表单 5.0.0.2612。
我的问题简而言之:
我想删除集合中的项目。该集合存储为静态属性,当单击删除按钮时,当代码停止在我的断点(负责删除)时,该项目已经被删除。
我有一个名为
CurrentOrder
的公共静态属性,类型为“Order”。
public static Order CurrentOrder { get; set; }
“Order”类是一个公共类,用于处理订单(添加、删除和修改......)。
public int? SalesOrderId { get; set; } = null;
// items to order or already ordered
public List<OrderItem> OrderDetails { get; set; } = new List<OrderItem>();
// items to delete
public List<OrderItem> DeletedOrderDetails { get; set; } = new List<OrderItem>();
private IOrderManager _manager;
private readonly HttpService _httpsService;
private Order()
{
_httpsService = DependencyService.Resolve<HttpService>();
// Create a new instance of the manager
_manager = new OrderManagerFDM();
}
private Order(int salesOrderId, List<OrderItem> details)
: this()
{
SalesOrderId = salesOrderId;
OrderDetails = details;
}
public static Order Create(int salesOrderId, List<OrderItem> details)
=> new Order(salesOrderId, details);
public Result AddOrderItem(OrderItem order)
{
return _manager.AddOrder(order, OrderDetails, DeletedOrderDetails);
}
public Result ModifyOrderItem(OrderItem order)
{
return _manager.ModifyOrder(order, OrderDetails);
}
public Result RemoveOrderItem(OrderItem order)
{
return _manager.RemoveOrder(order, OrderDetails, DeletedOrderDetails);
}
IOrderManager
用于能够根据项目的配置切换行为。目前(用于测试)只有一名经理:OrderManagerFDM
public class OrderManagerFDM : IOrderManager
{
// used to trace the commands
private List<OrderItemCommand> _addAndDeleteCommands;
public OrderManagerFDM()
{
_addAndDeleteCommands = new List<OrderItemCommand>();
}
public Result RemoveOrder(OrderItem itemToDelete, List<OrderItem> orderDetails, List<OrderItem> deletedOrderDetails)
{
// Add the command
_addAndDeleteCommands.Add(new OrderItemCommand(itemToDelete, OrderType.Remove));
try
{
// Have a look in the current orderDetails collection to find the item to delete
// And here, the itemToDelete is not found although it should be in the collection
var existingOrdered = orderDetails.FirstOrDefault(x => x == itemToDelete);
if (existingOrdered is null)
return Result.Failure("No item clould be found in orderDetails");
// Check if item is already added to sales order
if (existingOrdered.State == StateEnum.Update)
{
orderDetails.Remove(itemToDelete);
itemToDelete.IsOrdered = false;
deletedOrderDetails.Add(itemToDelete);
}
else
{
if (existingOrdered.Quantity <= itemToDelete.Quantity)
{
orderDetails.Remove(itemToDelete);
}
else
existingOrdered.Quantity -= itemToDelete.Quantity;
}
}
catch (Exception ex)
{
return Result.Failure(ex.ToString());
}
return Result.Success();
}
}
问题描述:
在视图中,我有一个命令绑定到
ViewModel
DeleteCommand = new Command(async () => await ExecuteDelete());
此命令在
ViewModel
中执行以下代码:
async Task ExecuteDelete()
{
// Breakpoint 1: All items in the collection
OrderItem existingOrderDetail = Global.CurrentOrder
.OrderDetails
.FirstOrDefault(x => x.Id == _editOrderItemId);
// Breakpoint 2 : the item to delete isn't anymore in the collection
Global.CurrentOrder.RemoveOrderItem(existingOrderDetail);
// Breakpoint 3: The item isn't in the deletedOrders collection because it couldn'd be found in the _manager
await ExecuteCancel();
}
第一行,在
Global.CurrentOrder
(带有订单的静态属性)中查找我要删除的项目,并找到该项目。
现在,在第二行代码中,从静态 Global.Current 调用
RemoveOrderItem
并传递要删除的项目。现在,在踏入之前,该项目已不再位于
Global.CurrentOrder.OrderDetails
集合中
查看当前订单的
OrderManagerFDM
实例,在我进入此代码之前已经有一个删除相同项目的条目。
断点1:集合中可以找到要删除的项
在
Global.CurrentOrder
上的订单内,OrderItem“itemToDelete”的自定义状态已标记为“删除”,并且在_manager
的跟踪中我可以看到带有删除的条目。
要删除的项目,现在应该在
Global.CurrentOrder
的 DeletedOrderDetails 集合中仍然是空的。
有人知道这可能来自哪里吗?
对我来说,看起来有些东西正在不同的任务中运行,但我不知道如何避免它。
我发现问题了。 它是 DevExpress 调试可视化工具,在输入问题之前评估函数。