Esempio n. 1
0
        public override async void OnNavigatedTo(NavigatedToEventArgs e, Dictionary <string, object> viewModelState)
        {
            // Get latest shopping cart
            var shoppingCart = await _shoppingCartRepository.GetShoppingCartAsync();

            _order = _orderRepository.CurrentOrder;
            _order.ShoppingCart = shoppingCart;

            // Populate the ShoppingCart items
            var shoppingCartItemVMs = _order.ShoppingCart.ShoppingCartItems.Select(item => new ShoppingCartItemViewModel(item, _resourceLoader));

            ShoppingCartItemViewModels = new ReadOnlyCollection <ShoppingCartItemViewModel>(shoppingCartItemVMs.ToList());

            // Populate the ShippingMethods and set the selected one
            var shippingMethods = await _shippingMethodService.GetShippingMethodsAsync();

            ShippingMethods        = new ReadOnlyCollection <ShippingMethod>(shippingMethods.ToList());
            SelectedShippingMethod = _order.ShippingMethod != null?ShippingMethods.FirstOrDefault(c => c.Id == _order.ShippingMethod.Id) : null;

            // Update order's address and payment information
            _order.ShippingAddress = await _checkoutDataRepository.GetShippingAddressAsync(_order.ShippingAddress.Id);

            _order.BillingAddress = await _checkoutDataRepository.GetBillingAddressAsync(_order.BillingAddress.Id);

            _order.PaymentMethod = await _checkoutDataRepository.GetPaymentMethodAsync(_order.PaymentMethod.Id);

            // Populate the CheckoutData items (Addresses & payment information)
            CheckoutDataViewModels = new ObservableCollection <CheckoutDataViewModel>
            {
                CreateCheckoutData(_order.ShippingAddress, Constants.ShippingAddress),
                CreateCheckoutData(_order.BillingAddress, Constants.BillingAddress),
                CreateCheckoutData(_order.PaymentMethod)
            };

            base.OnNavigatedTo(e, viewModelState);

            if (e.NavigationMode == NavigationMode.Refresh)
            {
                // Restore the selected CheckoutData manually
                string selectedCheckoutData = RetrieveEntityStateValue <string>("selectedCheckoutData", viewModelState);

                if (!string.IsNullOrWhiteSpace(selectedCheckoutData))
                {
                    SelectedCheckoutData = CheckoutDataViewModels.FirstOrDefault(c => c.EntityId == selectedCheckoutData);
                }
            }
        }