Коротко о моей проблеме:
Я хочу удалить элемент в коллекции . коллекция хранится как статическое свойство и при нажатии кнопки удаления элемент уже удаляется в момент остановки кода на моей точке останова (которая отвечает за удаление).
Я иметь общедоступное статическое свойство CurrentOrder типа Order.
Код: Выделить всё
public static Order CurrentOrder { get; set; }Код: Выделить всё
public int? SalesOrderId { get; set; } = null;
// items to order or already ordered
public List OrderDetails { get; set; } = new List();
// items to delete
public List DeletedOrderDetails { get; set; } = new List();
private IOrderManager _manager;
private readonly HttpService _httpsService;
private Order()
{
_httpsService = DependencyService.Resolve();
// Create a new instance of the manager
_manager = new OrderManagerFDM();
}
private Order(int salesOrderId, List details)
: this()
{
SalesOrderId = salesOrderId;
OrderDetails = details;
}
public static Order Create(int salesOrderId, List 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)
{
order.State = StateEnum.Delete;
return _manager.RemoveOrder(order, OrderDetails, DeletedOrderDetails);
}
Код: Выделить всё
public class OrderManagerFDM : IOrderManager
{
// used to trace the commands
private List _addAndDeleteCommands;
public OrderManagerFDM()
{
_addAndDeleteCommands = new List();
}
public Result RemoveOrder(OrderItem itemToDelete, List orderDetails, List 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 await ExecuteDelete());Код: Выделить всё
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();
}
Теперь во второй строке кода мы вызываем RemoveOrderItem из статического Global.Current и передаем элемент для удаления. Теперь перед переходом элемент больше не находится в коллекции Global.CurrentOrder.OrderDetails.
Глядя на экземпляр OrderManagerFDM текущего заказа, уже существует запись с удалением того же элемента, прежде чем я введу этот код.
Точка останова 1: элемент, который нужно удалить, можно найти в коллекции

Точка останова 2: элемента больше нет в коллекции
ItemToDelete больше не завершается
Внутри Order в Global.CurrentOrder пользовательское состояние OrderItem "itemToDelete" уже помечено как "Удалить" и находится в трассировке _manager Я вижу запись с удалением.
[img]https://i.stack.imgur.com /j4H9r.png[/img]

< /p>
И элемент для удаления, который теперь должен быть добавлен в коллекцию DeletedOrderDetails Global.CurrentOrder, по-прежнему пуст.
Может ли кто-нибудь есть идеи, откуда это могло взяться?
Мне кажется, что что-то выполняется в разных задачах, но я не могу понять, как этого избежать.
Подробнее здесь: https://stackoverflow.com/questions/782 ... breakpoint
Мобильная версия