public override async void OnNavigatedTo(object navigationParameter, NavigationMode navigationMode, Dictionary <string, object> viewState)
        {
            // The States collection needs to be populated before setting the State property
            await PopulateStatesAsync();

            if (viewState != null)
            {
                base.OnNavigatedTo(navigationParameter, navigationMode, viewState);

                if (navigationMode == NavigationMode.Refresh)
                {
                    // Restore the errors collection manually
                    var errorsCollection = RetrieveEntityStateValue <IDictionary <string, ReadOnlyCollection <string> > >("errorsCollection", viewState);

                    if (errorsCollection != null)
                    {
                        _address.SetAllErrors(errorsCollection);
                    }
                }
            }

            if (navigationMode == NavigationMode.New)
            {
                _addressId = navigationParameter as string;
                if (_addressId != null)
                {
                    Address = await _checkoutDataRepository.GetBillingAddressAsync(_addressId);

                    return;
                }

                if (_loadDefault)
                {
                    var defaultAddress = await _checkoutDataRepository.GetDefaultBillingAddressAsync();

                    if (defaultAddress != null)
                    {
                        // Update the information and validate the values
                        Address.FirstName       = defaultAddress.FirstName;
                        Address.MiddleInitial   = defaultAddress.MiddleInitial;
                        Address.LastName        = defaultAddress.LastName;
                        Address.StreetAddress   = defaultAddress.StreetAddress;
                        Address.OptionalAddress = defaultAddress.OptionalAddress;
                        Address.City            = defaultAddress.City;
                        Address.State           = defaultAddress.State;
                        Address.ZipCode         = defaultAddress.ZipCode;
                        Address.Phone           = defaultAddress.Phone;
                    }
                }
            }
        }
        private async void Initialize()
        {
            if (await _accountService.VerifyUserAuthenticationAsync() == null)
            {
                return;
            }

            // Populate ShippingAddress collection
            var shippingAddresses = (await _checkoutDataRepository.GetAllShippingAddressesAsync()).Select(address => CreateCheckoutData(address, Constants.ShippingAddress));

            ShippingAddresses = new ReadOnlyCollection <CheckoutDataViewModel>(shippingAddresses.ToList());

            if (ShippingAddresses != null)
            {
                var defaultShippingAddress = await _checkoutDataRepository.GetDefaultShippingAddressAsync();

                var selectedShippingAddress = defaultShippingAddress != null?ShippingAddresses.FirstOrDefault(s => s.EntityId == defaultShippingAddress.Id) : null;

                SetProperty(ref _selectedShippingAddress, selectedShippingAddress, "SelectedShippingAddress");
            }

            // Populate BillingAddress collection
            var billingAddresses = (await _checkoutDataRepository.GetAllBillingAddressesAsync()).Select(address => CreateCheckoutData(address, Constants.BillingAddress));

            BillingAddresses = new ReadOnlyCollection <CheckoutDataViewModel>(billingAddresses.ToList());

            if (BillingAddresses != null)
            {
                var defaultBillingAddress = await _checkoutDataRepository.GetDefaultBillingAddressAsync();

                var selectedBillingAddress = defaultBillingAddress != null?BillingAddresses.FirstOrDefault(s => s.EntityId == defaultBillingAddress.Id) : null;

                SetProperty(ref _selectedBillingAddress, selectedBillingAddress, "SelectedBillingAddress");
            }

            // Populate PaymentMethod collection
            var paymentMethods = (await _checkoutDataRepository.GetAllPaymentMethodsAsync()).Select(CreateCheckoutData);

            PaymentMethods = new ReadOnlyCollection <CheckoutDataViewModel>(paymentMethods.ToList());

            if (PaymentMethods != null)
            {
                var defaultPaymentMethod = await _checkoutDataRepository.GetDefaultPaymentMethodAsync();

                var selectedPaymentMethod = defaultPaymentMethod != null?PaymentMethods.FirstOrDefault(s => s.EntityId == defaultPaymentMethod.Id) : null;

                SetProperty(ref _selectedPaymentMethod, selectedPaymentMethod, "SelectedPaymentMethod");
            }
        }
コード例 #3
0
        private async Task <Action> ResolveNavigationActionAsync()
        {
            Action navigateAction             = null;
            var    navigationServiceReference = _navigationService;

            // Retrieve the default information for the Order
            var defaultShippingAddress = await _checkoutDataRepository.GetDefaultShippingAddressAsync();

            var defaultBillingAddress = await _checkoutDataRepository.GetDefaultBillingAddressAsync();

            var defaultPaymentMethod = await _checkoutDataRepository.GetDefaultPaymentMethodAsync();

            if (defaultShippingAddress == null || defaultBillingAddress == null || defaultPaymentMethod == null)
            {
                // Navigate to the CheckoutHubPage to fill the missing default information
                navigateAction = () => navigationServiceReference.Navigate("CheckoutHub", null);
            }
            else
            {
                // Create the Order with the current information. Then navigate to the CheckoutSummaryPage
                var shoppingCartReference    = _shoppingCart;
                var orderRepositoryReference = _orderRepository;
                var accountServiceReference  = _accountService;
                navigateAction = async() =>
                {
                    var user = accountServiceReference.SignedInUser;
                    await orderRepositoryReference.CreateBasicOrderAsync(user.UserName,
                                                                         shoppingCartReference,
                                                                         defaultShippingAddress,
                                                                         defaultBillingAddress,
                                                                         defaultPaymentMethod);

                    navigationServiceReference.Navigate("CheckoutSummary", null);
                };
            }

            return(navigateAction);
        }