执行一个命令就是调用一个函数两次而没有到达断点

问题描述 投票:0回答:1

我正在使用 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:集合中可以找到要删除的项 enter image description here

断点 2:该项目不再在集合中 ItemToDelete doesn't exits anymore

Global.CurrentOrder
上的订单内,OrderItem“itemToDelete”的自定义状态已标记为“删除”,并且在
_manager
的跟踪中我可以看到带有删除的条目。

enter image description here

enter image description here

要删除的项目,现在应该在

Global.CurrentOrder
的 DeletedOrderDetails 集合中仍然是空的。

有人知道这可能来自哪里吗?

对我来说,看起来有些东西正在不同的任务中运行,但我不知道如何避免它。

c# xamarin xamarin.forms
1个回答
0
投票

我发现问题了。 它是 DevExpress 调试可视化工具,在输入问题之前评估函数。

© www.soinside.com 2019 - 2024. All rights reserved.