diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs index 5886be0bb..2c5a73cfb 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs @@ -1,6 +1,6 @@ using eShopOnContainers.Core.Helpers; using eShopOnContainers.Services; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; @@ -28,13 +28,12 @@ namespace eShopOnContainers { UseMockServices = Settings.UseMocks; - ViewModelLocator.Initialize(); - ViewModelLocator.UpdateDependencies(UseMockServices); + ViewModelLocator.Instance.UpdateDependencies(UseMockServices); } private Task InitNavigation() { - var navigationService = ViewModelLocator.Resolve(); + var navigationService = ViewModelLocator.Instance.Resolve(); return navigationService.InitializeAsync(); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/AnimationExtension.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/AnimationExtension.cs new file mode 100644 index 000000000..edc9b07ab --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/AnimationExtension.cs @@ -0,0 +1,18 @@ +using eShopOnContainers.Core.Animations.Base; +using System; +using Xamarin.Forms; + +namespace eShopOnContainers.Core.Extensions +{ + public static class AnimationExtension + { + public static async void Animate(this VisualElement visualElement, AnimationBase animation, Action onFinishedCallback = null) + { + animation.Target = visualElement; + + await animation.Begin(); + + onFinishedCallback?.Invoke(); + } + } +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/ServicesHelper.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/ServicesHelper.cs index 5241fd823..29bbe2718 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/ServicesHelper.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/ServicesHelper.cs @@ -1,6 +1,6 @@ using eShopOnContainers.Core.Models.Basket; using eShopOnContainers.Core.Models.Catalog; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System; using System.Collections.Generic; using System.Diagnostics; @@ -21,7 +21,7 @@ namespace eShopOnContainers.Core.Helpers try { - if (!ViewModelLocator.UseMockService + if (!ViewModelLocator.Instance.UseMockService && Settings.UrlBase != GlobalSetting.DefaultEndpoint) { foreach (var catalogItem in catalogItems) @@ -54,7 +54,7 @@ namespace eShopOnContainers.Core.Helpers try { - if (!ViewModelLocator.UseMockService + if (!ViewModelLocator.Instance.UseMockService && Settings.UrlBase != GlobalSetting.DefaultEndpoint) { foreach (var basketItem in basketItems) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs index d698dc101..71bd832bc 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs @@ -1,4 +1,4 @@ -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using Plugin.Settings; using Plugin.Settings.Abstractions; @@ -27,7 +27,7 @@ namespace eShopOnContainers.Core.Helpers private const string IdUrlBase = "url_base"; private static readonly string AccessTokenDefault = string.Empty; private static readonly string IdTokenDefault = string.Empty; - private static readonly bool UseMocksDefault = ViewModelLocator.UseMockService; + private static readonly bool UseMocksDefault = ViewModelLocator.Instance.UseMockService; private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint; #endregion diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/INavigationService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/INavigationService.cs index 64ef7d807..ce3c56964 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/INavigationService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/INavigationService.cs @@ -1,4 +1,4 @@ -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System; using System.Threading.Tasks; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs index 32cd2ee9a..22383fdb1 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs @@ -1,10 +1,9 @@ using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.ViewModels; using eShopOnContainers.Core.Views; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System; -using System.Globalization; -using System.Reflection; +using System.Collections.Generic; using System.Threading.Tasks; using Xamarin.Forms; @@ -12,7 +11,9 @@ namespace eShopOnContainers.Services { public class NavigationService : INavigationService { - protected Application CurrentApplication + protected readonly Dictionary _mappings; + + protected Application CurrentApplication { get { @@ -20,6 +21,13 @@ namespace eShopOnContainers.Services } } + public NavigationService() + { + _mappings = new Dictionary(); + + CreatePageViewModelMappings(); + } + public Task InitializeAsync() { if(string.IsNullOrEmpty(Settings.AuthAccessToken)) @@ -92,7 +100,7 @@ namespace eShopOnContainers.Services protected virtual async Task InternalNavigateToAsync(Type viewModelType, object parameter) { - Page page = CreatePage(viewModelType, parameter); + Page page = CreateAndBindPage(viewModelType, parameter); if (page is LoginView) { @@ -101,6 +109,7 @@ namespace eShopOnContainers.Services else { var navigationPage = CurrentApplication.MainPage as CustomNavigationView; + if (navigationPage != null) { await navigationPage.PushAsync(page); @@ -116,23 +125,40 @@ namespace eShopOnContainers.Services protected Type GetPageTypeForViewModel(Type viewModelType) { - var viewName = viewModelType.FullName.Replace("Model", string.Empty); - var viewModelAssemblyName = viewModelType.GetTypeInfo().Assembly.FullName; - var viewAssemblyName = string.Format(CultureInfo.InvariantCulture, "{0}, {1}", viewName, viewModelAssemblyName); - var viewType = Type.GetType(viewAssemblyName); - return viewType; + if (!_mappings.ContainsKey(viewModelType)) + { + throw new KeyNotFoundException($"No map for ${viewModelType} was found on navigation mappings"); + } + + return _mappings[viewModelType]; } - protected Page CreatePage(Type viewModelType, object parameter) + protected Page CreateAndBindPage(Type viewModelType, object parameter) { Type pageType = GetPageTypeForViewModel(viewModelType); + if (pageType == null) { - throw new Exception($"Cannot locate page type for {viewModelType}"); + throw new Exception($"Mapping type for {viewModelType} is not a page"); } Page page = Activator.CreateInstance(pageType) as Page; + ViewModelBase viewModel = ViewModelLocator.Instance.Resolve(viewModelType) as ViewModelBase; + page.BindingContext = viewModel; + return page; } + + private void CreatePageViewModelMappings() + { + _mappings.Add(typeof(BasketViewModel), typeof(BasketView)); + _mappings.Add(typeof(CatalogViewModel), typeof(CatalogView)); + _mappings.Add(typeof(CheckoutViewModel), typeof(CheckoutView)); + _mappings.Add(typeof(LoginViewModel), typeof(LoginView)); + _mappings.Add(typeof(MainViewModel), typeof(MainView)); + _mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView)); + _mappings.Add(typeof(ProfileViewModel), typeof(ProfileView)); + _mappings.Add(typeof(SettingsViewModel), typeof(SettingsView)); + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Validations/ValidatableObject.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Validations/ValidatableObject.cs index d7dcdf737..b7caa0d0d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Validations/ValidatableObject.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Validations/ValidatableObject.cs @@ -1,4 +1,4 @@ -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ExtendedBindableObject.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ExtendedBindableObject.cs index 96ae124c0..eab1380aa 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ExtendedBindableObject.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ExtendedBindableObject.cs @@ -3,7 +3,7 @@ using System.Linq.Expressions; using System.Reflection; using Xamarin.Forms; -namespace eShopOnContainers.Core.ViewModels.Base +namespace eShopOnContainers.ViewModels.Base { public abstract class ExtendedBindableObject : BindableObject { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelBase.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelBase.cs index 376315d8f..299c2985a 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelBase.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelBase.cs @@ -1,8 +1,9 @@ -using eShopOnContainers.Core.Helpers; +using eShopOnContainers.Core; +using eShopOnContainers.Core.Helpers; using eShopOnContainers.Services; using System.Threading.Tasks; -namespace eShopOnContainers.Core.ViewModels.Base +namespace eShopOnContainers.ViewModels.Base { public abstract class ViewModelBase : ExtendedBindableObject { @@ -27,14 +28,14 @@ namespace eShopOnContainers.Core.ViewModels.Base public ViewModelBase() { - DialogService = ViewModelLocator.Resolve(); - NavigationService = ViewModelLocator.Resolve(); + DialogService = ViewModelLocator.Instance.Resolve(); + NavigationService = ViewModelLocator.Instance.Resolve(); GlobalSetting.Instance.BaseEndpoint = Settings.UrlBase; } public virtual Task InitializeAsync(object navigationData) { - return Task.FromResult(false); + return Task.FromResult(false); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index fd52cba04..82145d466 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -1,8 +1,7 @@ using Microsoft.Practices.Unity; +using eShopOnContainers.Core.ViewModels; using eShopOnContainers.Services; using System; -using System.Globalization; -using System.Reflection; using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.OpenUrl; using eShopOnContainers.Core.Services.RequestProvider; @@ -10,53 +9,54 @@ using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Identity; using eShopOnContainers.Core.Services.Order; using eShopOnContainers.Core.Services.User; -using Xamarin.Forms; -namespace eShopOnContainers.Core.ViewModels.Base +namespace eShopOnContainers.ViewModels.Base { - public static class ViewModelLocator + public class ViewModelLocator { - private static readonly IUnityContainer _unityContainer = new UnityContainer(); + private bool _useMockService; + private readonly IUnityContainer _unityContainer; - public static readonly BindableProperty AutoWireViewModelProperty = - BindableProperty.CreateAttached("AutoWireViewModel", typeof(bool), typeof(ViewModelLocator), default(bool), propertyChanged: OnAutoWireViewModelChanged); + private static readonly ViewModelLocator _instance = new ViewModelLocator(); - public static bool GetAutoWireViewModel(BindableObject bindable) - { - return (bool)bindable.GetValue(ViewModelLocator.AutoWireViewModelProperty); - } + public static ViewModelLocator Instance + { + get { return _instance; } + } + + public bool UseMockService + { + get { return _useMockService; } + set { _useMockService = value; ; } + } - public static void SetAutoWireViewModel(BindableObject bindable, bool value) - { - bindable.SetValue(ViewModelLocator.AutoWireViewModelProperty, value); - } + protected ViewModelLocator() + { + _unityContainer = new UnityContainer(); - public static bool UseMockService { get; set; } + // Services + _unityContainer.RegisterType(); + RegisterSingleton(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); - public static void Initialize() - { - // Services - _unityContainer.RegisterType(); - _unityContainer.RegisterType(new ContainerControlledLifetimeManager()); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); - // View models - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - _unityContainer.RegisterType(); - } + // View models + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + _unityContainer.RegisterType(); + } - public static void UpdateDependencies(bool useMockServices) + public void UpdateDependencies(bool useMockServices) { // Change injected dependencies if (useMockServices) @@ -80,31 +80,29 @@ namespace eShopOnContainers.Core.ViewModels.Base } } - public static T Resolve() + public T Resolve() { return _unityContainer.Resolve(); } - private static void OnAutoWireViewModelChanged(BindableObject bindable, object oldValue, object newValue) - { - var view = bindable as Element; - if (view == null) - { - return; - } + public object Resolve(Type type) + { + return _unityContainer.Resolve(type); + } + + public void Register(T instance) + { + _unityContainer.RegisterInstance(instance); + } - var viewType = view.GetType(); - var viewName = viewType.FullName.Replace(".Views.", ".ViewModels."); - var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName; - var viewModelName = string.Format(CultureInfo.InvariantCulture, "{0}Model, {1}", viewName, viewAssemblyName); + public void Register() where T : TInterface + { + _unityContainer.RegisterType(); + } - var viewModelType = Type.GetType(viewModelName); - if (viewModelType == null) - { - return; - } - var viewModel = _unityContainer.Resolve(viewModelType); - view.BindingContext = viewModel; - } + public void RegisterSingleton() where T : TInterface + { + _unityContainer.RegisterType(new ContainerControlledLifetimeManager()); + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs index 41cd481d7..a19e8dcdd 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs @@ -4,6 +4,8 @@ using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.User; using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; +using System; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; @@ -59,7 +61,7 @@ namespace eShopOnContainers.Core.ViewModels } } - public ICommand AddCommand => new Command(async (item) => await AddItemAsync(item)); + public ICommand AddCommand => new Command(AddItem); public ICommand CheckoutCommand => new Command(async () => await CheckoutAsync()); @@ -80,22 +82,22 @@ namespace eShopOnContainers.Core.ViewModels foreach (var basketItem in basket.Items) { BadgeCount += basketItem.Quantity; - await AddBasketItemAsync(basketItem); + AddBasketItem(basketItem); } } MessagingCenter.Unsubscribe(this, MessengerKeys.AddProduct); - MessagingCenter.Subscribe(this, MessengerKeys.AddProduct, async (sender, arg) => + MessagingCenter.Subscribe(this, MessengerKeys.AddProduct, (sender, arg) => { BadgeCount++; - await AddCatalogItemAsync(arg); + AddCatalogItem(arg); }); await base.InitializeAsync(navigationData); } - private async Task AddCatalogItemAsync(CatalogItem item) + private void AddCatalogItem(CatalogItem item) { BasketItems.Add(new BasketItem { @@ -106,23 +108,26 @@ namespace eShopOnContainers.Core.ViewModels Quantity = 1 }); - await ReCalculateTotal(); + ReCalculateTotal(); } - private async Task AddItemAsync(BasketItem item) + private void AddItem(BasketItem item) { BadgeCount++; - await AddBasketItemAsync(item); + + AddBasketItem(item); + RaisePropertyChanged(() => BasketItems); } - private async Task AddBasketItemAsync(BasketItem item) + private void AddBasketItem(BasketItem item) { BasketItems.Add(item); - await ReCalculateTotal(); + + ReCalculateTotal(); } - private async Task ReCalculateTotal() + private async void ReCalculateTotal() { Total = 0; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs index 82767e9d7..789cc5e50 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs @@ -1,11 +1,14 @@ using System.Threading.Tasks; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System.Collections.ObjectModel; using Xamarin.Forms; +using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Services.Catalog; using System.Windows.Input; +using System.Linq; using eShopOnContainers.Core.Services.Basket; +using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.Services.User; namespace eShopOnContainers.Core.ViewModels @@ -88,9 +91,9 @@ namespace eShopOnContainers.Core.ViewModels public ICommand AddCatalogItemCommand => new Command(AddCatalogItem); - public ICommand FilterCommand => new Command(async () => await FilterAsync()); + public ICommand FilterCommand => new Command(Filter); - public ICommand ClearFilterCommand => new Command(async () => await ClearFilterAsync()); + public ICommand ClearFilterCommand => new Command(ClearFilter); public override async Task InitializeAsync(object navigationData) { @@ -110,7 +113,7 @@ namespace eShopOnContainers.Core.ViewModels MessagingCenter.Send(this, MessengerKeys.AddProduct, catalogItem); } - private async Task FilterAsync() + private async void Filter() { if (Brand == null && Type == null) { @@ -126,7 +129,7 @@ namespace eShopOnContainers.Core.ViewModels IsBusy = false; } - private async Task ClearFilterAsync() + private async void ClearFilter() { IsBusy = true; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs index 96488edfb..41b8220e6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs @@ -1,5 +1,5 @@ using eShopOnContainers.Core.Models.Navigation; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System.Windows.Input; using Xamarin.Forms; using System.Threading.Tasks; @@ -138,7 +138,7 @@ namespace eShopOnContainers.Core.ViewModels await _basketService.ClearBasketAsync(_shippingAddress.Id.ToString(), authToken); // Reset Basket badge - var basketViewModel = ViewModelLocator.Resolve(); + var basketViewModel = ViewModelLocator.Instance.Resolve(); basketViewModel.BadgeCount = 0; // Navigate to Orders diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs index 5ae1af4de..53f5998a0 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs @@ -4,7 +4,7 @@ using eShopOnContainers.Core.Services.Identity; using eShopOnContainers.Core.Services.OpenUrl; using eShopOnContainers.Core.Services.User; using eShopOnContainers.Core.Validations; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using IdentityModel.Client; using System; using System.Diagnostics; @@ -133,9 +133,10 @@ namespace eShopOnContainers.Core.ViewModels public override Task InitializeAsync(object navigationData) { - if (navigationData is LogoutParameter) + if(navigationData is LogoutParameter) { var logoutParameter = (LogoutParameter)navigationData; + if (logoutParameter.Logout) { Logout(); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs index eebc17e35..aa279ee0d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs @@ -1,5 +1,5 @@ using System.Threading.Tasks; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using eShopOnContainers.Core.Models.Navigation; using Xamarin.Forms; using eShopOnContainers.Core.ViewModels.Base; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs index 86b5a906a..7156038af 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; using eShopOnContainers.Core.Models.Orders; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Order; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs index 2cc1ab9d9..9856b7a21 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs @@ -3,7 +3,7 @@ using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.User; using eShopOnContainers.Core.Services.Order; -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System.Collections.ObjectModel; using System.Threading.Tasks; using System.Windows.Input; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs index c5a58b745..1fa5b54b6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs @@ -1,4 +1,4 @@ -using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.ViewModels.Base; using System.Windows.Input; using Xamarin.Forms; using System.Threading.Tasks; @@ -71,7 +71,7 @@ namespace eShopOnContainers.Core.ViewModels private void MockServices() { - ViewModelLocator.UpdateDependencies(!UseAzureServices); + ViewModelLocator.Instance.UpdateDependencies(!UseAzureServices); UpdateInfo(); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml index 80fefefdf..e7499fd66 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml @@ -1,11 +1,9 @@ diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml index 2d2d1ddde..870980ac2 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml @@ -1,14 +1,12 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml.cs index ce2b888ad..e2c9b4943 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml.cs @@ -47,8 +47,7 @@ namespace eShopOnContainers.Core.Views { base.OnBindingContextChanged(); - if (_filterView != null) - _filterView.BindingContext = BindingContext; + _filterView.BindingContext = BindingContext; } private void OnFilterChanged(object sender, EventArgs e) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml index a785e2e1c..921d739f3 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml @@ -1,10 +1,8 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml index 9382a6556..d713e0691 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml @@ -2,11 +2,9 @@ + xmlns:behaviors="clr-namespace:eShopOnContainers.Core.Behaviors;assembly=eShopOnContainers.Core"> + + BarTextColor="{StaticResource WhiteColor}"> (); + await homeViewModel.InitializeAsync(null); + HomeView.BindingContext = homeViewModel; + + var basketViewModel = ViewModelLocator.Instance.Resolve(); + await basketViewModel.InitializeAsync(null); + BasketView.BindingContext = basketViewModel; + + var profileViewModel = ViewModelLocator.Instance.Resolve(); + await profileViewModel.InitializeAsync(null); + ProfileView.BindingContext = profileViewModel; } } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/OrderDetailView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/OrderDetailView.xaml index d424edbc0..d0c2602fc 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/OrderDetailView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/OrderDetailView.xaml @@ -1,12 +1,10 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/ProfileView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/ProfileView.xaml index 57b00c7d0..0662d40ac 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/ProfileView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/ProfileView.xaml @@ -1,13 +1,11 @@ - + + Title="My profile"> diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml index 167e637e6..b13a4855d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml @@ -1,13 +1,11 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj index 4a898b528..c38f528ec 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj @@ -60,6 +60,7 @@ +