public async Task HandleItemDeleted(OrderItemListView obj)
        {
            ContentDialogResult result = await this.messageDialog.ShowAsync();

            if (result == ContentDialogResult.Primary)
            {
                this.DeletOrderItem(obj);
            }
        }
        public void DeletOrderItem(OrderItemListView orderItem)
        {
            int index = this.OrderItems.IndexOf(orderItem);

            this.OrderItems[index].ItemDeleteClicked -= this.HandleItemDeleted;
            this.OrderItems.RemoveAt(index);
            orderItem.Dispose();
            RaisePropertyChanged("IsProceedEnabled");
        }
        private async void AddProduct(Product product)
        {
            this.decimalTextBox.Text    = "1";
            this.quantityDialog.Content = this.decimalTextBox;
            this.quantityDialog.Title   = "Enter quantity";
            ContentDialogResult result = await this.ShowQuantityDialog();

            if (result == ContentDialogResult.Primary)
            {
                TextBox input = (TextBox)quantityDialog.Content;
                decimal.TryParse(input.Text, out decimal quantity);
                if (quantity == 0)
                {
                    quantity = 1;
                }
                if (quantity <= product.Quantity)
                {
                    if (OrderItems.Any(p => p.OrderItem.ProductId == product.ProductId))
                    {
                        OrderItemListView existingItem = OrderItems.FirstOrDefault(p => p.OrderItem.ProductId == product.ProductId);
                        int index = OrderItems.IndexOf(existingItem);
                        existingItem.OrderItem.Quantity += quantity;
                        OrderItemListView orderItemListView = this.GetDuplicatedItem(existingItem);
                        OrderItems.RemoveAt(index);
                        OrderItems.Insert(index, orderItemListView);
                    }
                    else
                    {
                        OrderItemListView orderItem = new OrderItemListView
                        {
                            OrderItem = new OrderItem
                            {
                                Product      = product,
                                ProductId    = product.ProductId,
                                Quantity     = quantity,
                                LineDiscount = 0,
                                SubTotal     = this.GetSubTotal(product.SellingPrice, quantity, 0)
                            }
                        };
                        orderItem.ItemDeleteClicked += this.HandleItemDeleted;
                        OrderItems.Add(orderItem);
                    }
                    RaisePropertyChanged("OrderItems");
                    RaisePropertyChanged("IsProceedEnabled");
                }
                else
                {
                    this.messageDialog.Content = "Insufficient quantity !";
                    await this.messageDialog.ShowAsync();
                }
                this.SearchText = product.Name;
            }
            this.SearchText = string.Empty;
        }
        private OrderItemListView GetDuplicatedItem(OrderItemListView oldOrderItem)
        {
            OrderItemListView orderItemListView = new OrderItemListView
            {
                OrderItem = new OrderItem
                {
                    Product      = oldOrderItem.OrderItem.Product,
                    ProductId    = oldOrderItem.OrderItem.ProductId,
                    Quantity     = oldOrderItem.OrderItem.Quantity,
                    LineDiscount = oldOrderItem.OrderItem.LineDiscount,
                    SubTotal     = oldOrderItem.OrderItem.SubTotal
                }
            };

            orderItemListView.OrderItem.SubTotal = this.GetSubTotal(orderItemListView.OrderItem.Product.SellingPrice, orderItemListView.OrderItem.Quantity, orderItemListView.OrderItem.LineDiscount);
            orderItemListView.ItemDeleteClicked += this.HandleItemDeleted;
            oldOrderItem.ItemDeleteClicked      -= this.HandleItemDeleted;
            return(orderItemListView);
        }
 private void HandleCellEditEnded(DataGridCellEditEndingEventArgs obj)
 {
     if (obj.EditingElement is TextBox textBox)
     {
         string value = textBox.Text;
         if (decimal.TryParse(value, out decimal decimalValue))
         {
             Enum.TryParse(obj.Column.Tag.ToString(), out OrderColumnType orderColumnType);
             int rowIndex = obj.Row.GetIndex();
             OrderItemListView existingOrderItem = OrderItems[rowIndex];
             existingOrderItem.OrderItem.GetType().GetProperty(orderColumnType.ToString()).SetValue(existingOrderItem.OrderItem, decimalValue);
             var column = orderColumnType.ToString();
             OrderItemListView updatedOrderItem = this.GetDuplicatedItem(existingOrderItem);
             this.DeletOrderItem(existingOrderItem);
             this.OrderItems.Insert(rowIndex, updatedOrderItem);
             existingOrderItem.Dispose();
         }
     }
 }