Changes in mobile apps:
- Filters - Added Checkout View
This commit is contained in:
parent
b9223b34c2
commit
515ba92fd6
@ -103,6 +103,7 @@
|
|||||||
<converters:ImageConverter x:Key="ImageConverter" />
|
<converters:ImageConverter x:Key="ImageConverter" />
|
||||||
<converters:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" />
|
<converters:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" />
|
||||||
<converters:InverseCountToBoolConverter x:Key="InverseCountToBoolConverter" />
|
<converters:InverseCountToBoolConverter x:Key="InverseCountToBoolConverter" />
|
||||||
|
<converters:InverseBoolConverter x:Key="InverseBoolConverter" />
|
||||||
<converters:ToUpperConverter x:Key="ToUpperConverter" />
|
<converters:ToUpperConverter x:Key="ToUpperConverter" />
|
||||||
|
|
||||||
<!-- STYLES -->
|
<!-- STYLES -->
|
||||||
|
@ -101,10 +101,12 @@ namespace eShopOnContainers.Core.Controls
|
|||||||
private static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
|
private static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
{
|
{
|
||||||
var boundPicker = (BindablePicker)bindable;
|
var boundPicker = (BindablePicker)bindable;
|
||||||
|
|
||||||
if (boundPicker.ItemSelected != null)
|
if (boundPicker.ItemSelected != null)
|
||||||
{
|
{
|
||||||
boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue));
|
boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
boundPicker.InternalUpdateSelectedIndex();
|
boundPicker.InternalUpdateSelectedIndex();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Converters
|
||||||
|
{
|
||||||
|
public class InverseBoolConverter : IValueConverter
|
||||||
|
{
|
||||||
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
if (!(value is bool))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("The target must be a boolean");
|
||||||
|
}
|
||||||
|
|
||||||
|
return !(bool)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Extensions
|
||||||
|
{
|
||||||
|
public static class ObservableExtension
|
||||||
|
{
|
||||||
|
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source)
|
||||||
|
{
|
||||||
|
ObservableCollection<T> collection = new ObservableCollection<T>();
|
||||||
|
|
||||||
|
foreach (T item in source)
|
||||||
|
{
|
||||||
|
collection.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return collection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Helpers
|
||||||
|
{
|
||||||
|
public class NumericHelper
|
||||||
|
{
|
||||||
|
public static ObservableCollection<int> GetNumericList(int count = 100)
|
||||||
|
{
|
||||||
|
var result = new ObservableCollection<int>();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
result.Add(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
namespace eShopOnContainers.Core.Models.Catalog
|
||||||
|
{
|
||||||
|
public class CatalogBrand
|
||||||
|
{
|
||||||
|
public int CatalogBrandId { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,5 @@
|
|||||||
public string CatalogBrand { get; set; }
|
public string CatalogBrand { get; set; }
|
||||||
public int CatalogTypeId { get; set; }
|
public int CatalogTypeId { get; set; }
|
||||||
public string CatalogType { get; set; }
|
public string CatalogType { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
namespace eShopOnContainers.Core.Models.Catalog
|
||||||
|
{
|
||||||
|
public class CatalogType
|
||||||
|
{
|
||||||
|
public int CatalogTypeId { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
namespace eShopOnContainers.Core.Models.Navigation
|
||||||
|
{
|
||||||
|
public class TabParameter
|
||||||
|
{
|
||||||
|
public int TabIndex { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,7 @@ namespace eShopOnContainers.Core.Models.Orders
|
|||||||
public class Order
|
public class Order
|
||||||
{
|
{
|
||||||
public int SequenceNumber { get; set; }
|
public int SequenceNumber { get; set; }
|
||||||
public double Total { get; set; }
|
public decimal Total { get; set; }
|
||||||
public DateTime OrderDate { get; set; }
|
public DateTime OrderDate { get; set; }
|
||||||
public OrderStatus Status { get; set; }
|
public OrderStatus Status { get; set; }
|
||||||
public User.User ShippingAddress { get; set; }
|
public User.User ShippingAddress { get; set; }
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
using eShopOnContainers.ViewModels.Base;
|
using eShopOnContainers.Core.Helpers;
|
||||||
|
using eShopOnContainers.Core.ViewModels.Base;
|
||||||
|
using eShopOnContainers.ViewModels.Base;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.Models.Orders
|
namespace eShopOnContainers.Core.Models.Orders
|
||||||
{
|
{
|
||||||
@ -12,6 +16,12 @@ namespace eShopOnContainers.Core.Models.Orders
|
|||||||
private decimal _unitPrice;
|
private decimal _unitPrice;
|
||||||
private int _quantity;
|
private int _quantity;
|
||||||
private decimal _discount;
|
private decimal _discount;
|
||||||
|
private ObservableCollection<int> _numbers;
|
||||||
|
|
||||||
|
public OrderItem()
|
||||||
|
{
|
||||||
|
Numbers = NumericHelper.GetNumericList();
|
||||||
|
}
|
||||||
|
|
||||||
public int ProductId
|
public int ProductId
|
||||||
{
|
{
|
||||||
@ -60,6 +70,9 @@ namespace eShopOnContainers.Core.Models.Orders
|
|||||||
{
|
{
|
||||||
_quantity = value;
|
_quantity = value;
|
||||||
RaisePropertyChanged(() => Quantity);
|
RaisePropertyChanged(() => Quantity);
|
||||||
|
RaisePropertyChanged(() => Total);
|
||||||
|
|
||||||
|
MessagingCenter.Send(this, MessengerKeys.UpdateProduct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,6 +98,16 @@ namespace eShopOnContainers.Core.Models.Orders
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<int> Numbers
|
||||||
|
{
|
||||||
|
get { return _numbers; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_numbers = value;
|
||||||
|
RaisePropertyChanged(() => Numbers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);
|
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using eShopOnContainers.Core.Models.Catalog;
|
using eShopOnContainers.Core.Extensions;
|
||||||
|
using eShopOnContainers.Core.Models.Catalog;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -9,11 +10,25 @@ namespace eShopOnContainers.Core.Services.Catalog
|
|||||||
{
|
{
|
||||||
public class CatalogMockService : ICatalogService
|
public class CatalogMockService : ICatalogService
|
||||||
{
|
{
|
||||||
|
private ObservableCollection<CatalogBrand> MockCatalogBrand = new ObservableCollection<CatalogBrand>
|
||||||
|
{
|
||||||
|
new CatalogBrand { CatalogBrandId = 1, Name = "Azure" },
|
||||||
|
new CatalogBrand { CatalogBrandId = 2, Name = "Visual Studio" }
|
||||||
|
};
|
||||||
|
|
||||||
|
private ObservableCollection<CatalogType> MockCatalogType = new ObservableCollection<CatalogType>
|
||||||
|
{
|
||||||
|
new CatalogType { CatalogTypeId = 1, Name = "Mug" },
|
||||||
|
new CatalogType { CatalogTypeId = 2, Name = "T-Shirt" }
|
||||||
|
};
|
||||||
|
|
||||||
private ObservableCollection<CatalogItem> MockCatalog = new ObservableCollection<CatalogItem>
|
private ObservableCollection<CatalogItem> MockCatalog = new ObservableCollection<CatalogItem>
|
||||||
{
|
{
|
||||||
new CatalogItem { Id = "1", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M },
|
new CatalogItem { Id = "1", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" },
|
||||||
new CatalogItem { Id = "2", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M },
|
new CatalogItem { Id = "2", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" },
|
||||||
new CatalogItem { Id = "3", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M }
|
new CatalogItem { Id = "3", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" },
|
||||||
|
new CatalogItem { Id = "4", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_04": "Assets/fake_product_04.png", Name = ".NET Black Cupt", Price = 17.00M, CatalogBrand = "Visual Studio", CatalogType = "Mug" },
|
||||||
|
new CatalogItem { Id = "5", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_05": "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Azure", CatalogType = "T-Shirt" }
|
||||||
};
|
};
|
||||||
|
|
||||||
public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync()
|
public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync()
|
||||||
@ -23,6 +38,30 @@ namespace eShopOnContainers.Core.Services.Catalog
|
|||||||
return MockCatalog;
|
return MockCatalog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<ObservableCollection<CatalogItem>> FilterAsync(string catalogBrand, string catalogType)
|
||||||
|
{
|
||||||
|
await Task.Delay(500);
|
||||||
|
|
||||||
|
return MockCatalog
|
||||||
|
.Where(c => c.CatalogBrand.Equals(catalogBrand, StringComparison.CurrentCultureIgnoreCase) &&
|
||||||
|
c.CatalogType.Equals(catalogType, StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
.ToObservableCollection();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync()
|
||||||
|
{
|
||||||
|
await Task.Delay(500);
|
||||||
|
|
||||||
|
return MockCatalogBrand;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync()
|
||||||
|
{
|
||||||
|
await Task.Delay(500);
|
||||||
|
|
||||||
|
return MockCatalogType;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<CatalogItem> GetCatalogItemAsync(string id)
|
public async Task<CatalogItem> GetCatalogItemAsync(string id)
|
||||||
{
|
{
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
|
@ -6,6 +6,9 @@ namespace eShopOnContainers.Core.Services.Catalog
|
|||||||
{
|
{
|
||||||
public interface ICatalogService
|
public interface ICatalogService
|
||||||
{
|
{
|
||||||
|
Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync();
|
||||||
|
Task<ObservableCollection<CatalogItem>> FilterAsync(string catalogBrand, string catalogType);
|
||||||
|
Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync();
|
||||||
Task<ObservableCollection<CatalogItem>> GetCatalogAsync();
|
Task<ObservableCollection<CatalogItem>> GetCatalogAsync();
|
||||||
Task<CatalogItem> GetCatalogItemAsync(string id);
|
Task<CatalogItem> GetCatalogItemAsync(string id);
|
||||||
}
|
}
|
||||||
|
@ -149,6 +149,7 @@ namespace eShopOnContainers.Services
|
|||||||
{
|
{
|
||||||
_mappings.Add(typeof(CartViewModel), typeof(CartView));
|
_mappings.Add(typeof(CartViewModel), typeof(CartView));
|
||||||
_mappings.Add(typeof(CatalogViewModel), typeof(CatalogView));
|
_mappings.Add(typeof(CatalogViewModel), typeof(CatalogView));
|
||||||
|
_mappings.Add(typeof(CheckoutViewModel), typeof(CheckoutView));
|
||||||
_mappings.Add(typeof(LoginViewModel), typeof(LoginView));
|
_mappings.Add(typeof(LoginViewModel), typeof(LoginView));
|
||||||
_mappings.Add(typeof(MainViewModel), typeof(MainView));
|
_mappings.Add(typeof(MainViewModel), typeof(MainView));
|
||||||
_mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView));
|
_mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView));
|
||||||
|
@ -14,9 +14,9 @@ namespace eShopOnContainers.Core.Services.Orders
|
|||||||
|
|
||||||
return new ObservableCollection<Order>
|
return new ObservableCollection<Order>
|
||||||
{
|
{
|
||||||
new Order { SequenceNumber = 123, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
new Order { SequenceNumber = 123, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
||||||
new Order { SequenceNumber = 132, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
new Order { SequenceNumber = 132, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
||||||
new Order { SequenceNumber = 231, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
new Order { SequenceNumber = 231, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ namespace eShopOnContainers.Core.Services.Orders
|
|||||||
{
|
{
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
|
|
||||||
return new Order { SequenceNumber = 0123456789, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Pending, OrderItems = GetOrderItems() };
|
return new Order { SequenceNumber = 0123456789, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Pending, OrderItems = GetOrderItems() };
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<OrderItem> GetOrderItems()
|
private List<OrderItem> GetOrderItems()
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Services.User
|
||||||
|
{
|
||||||
|
public interface IUserService
|
||||||
|
{
|
||||||
|
Task<Models.User.User> GetUserAsync();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Services.User
|
||||||
|
{
|
||||||
|
public class UserMockService : IUserService
|
||||||
|
{
|
||||||
|
private Models.User.User MockUser = new Models.User.User
|
||||||
|
{
|
||||||
|
Name = "Jhon",
|
||||||
|
LastName = "Doe",
|
||||||
|
City = "Seattle, WA",
|
||||||
|
Street = "120 E 87th Street",
|
||||||
|
CountryCode = "98122",
|
||||||
|
Country = "United States"
|
||||||
|
};
|
||||||
|
|
||||||
|
public async Task<Models.User.User> GetUserAsync()
|
||||||
|
{
|
||||||
|
await Task.Delay(500);
|
||||||
|
|
||||||
|
return MockUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,5 +4,14 @@
|
|||||||
{
|
{
|
||||||
// Add product to cart
|
// Add product to cart
|
||||||
public const string AddProduct = "AddProduct";
|
public const string AddProduct = "AddProduct";
|
||||||
|
|
||||||
|
// Update product cart
|
||||||
|
public const string UpdateProduct = "UpdateProduct";
|
||||||
|
|
||||||
|
// Filter
|
||||||
|
public const string Filter = "Filter";
|
||||||
|
|
||||||
|
// Change selected Tab programmatically
|
||||||
|
public const string ChangeTab = "ChangeTab";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ using eShopOnContainers.Services;
|
|||||||
using System;
|
using System;
|
||||||
using eShopOnContainers.Core.Services.Catalog;
|
using eShopOnContainers.Core.Services.Catalog;
|
||||||
using eShopOnContainers.Core.Services.OpenUrl;
|
using eShopOnContainers.Core.Services.OpenUrl;
|
||||||
|
using eShopOnContainers.Core.Services.User;
|
||||||
|
|
||||||
namespace eShopOnContainers.ViewModels.Base
|
namespace eShopOnContainers.ViewModels.Base
|
||||||
{
|
{
|
||||||
@ -16,10 +17,7 @@ namespace eShopOnContainers.ViewModels.Base
|
|||||||
|
|
||||||
public static ViewModelLocator Instance
|
public static ViewModelLocator Instance
|
||||||
{
|
{
|
||||||
get
|
get { return _instance; }
|
||||||
{
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ViewModelLocator()
|
protected ViewModelLocator()
|
||||||
@ -30,12 +28,15 @@ namespace eShopOnContainers.ViewModels.Base
|
|||||||
_unityContainer.RegisterType<IDialogService, DialogService>();
|
_unityContainer.RegisterType<IDialogService, DialogService>();
|
||||||
RegisterSingleton<INavigationService, NavigationService>();
|
RegisterSingleton<INavigationService, NavigationService>();
|
||||||
_unityContainer.RegisterType<IOpenUrlService, OpenUrlService>();
|
_unityContainer.RegisterType<IOpenUrlService, OpenUrlService>();
|
||||||
|
|
||||||
_unityContainer.RegisterType<ICatalogService, CatalogMockService>();
|
_unityContainer.RegisterType<ICatalogService, CatalogMockService>();
|
||||||
_unityContainer.RegisterType<IOrdersService, OrdersMockService>();
|
_unityContainer.RegisterType<IOrdersService, OrdersMockService>();
|
||||||
|
_unityContainer.RegisterType<IUserService, UserMockService>();
|
||||||
|
|
||||||
// view models
|
// view models
|
||||||
_unityContainer.RegisterType<CartViewModel>();
|
_unityContainer.RegisterType<CartViewModel>();
|
||||||
_unityContainer.RegisterType<CatalogViewModel>();
|
_unityContainer.RegisterType<CatalogViewModel>();
|
||||||
|
_unityContainer.RegisterType<CheckoutViewModel>();
|
||||||
_unityContainer.RegisterType<LoginViewModel>();
|
_unityContainer.RegisterType<LoginViewModel>();
|
||||||
_unityContainer.RegisterType<MainViewModel>();
|
_unityContainer.RegisterType<MainViewModel>();
|
||||||
_unityContainer.RegisterType<OrderDetailViewModel>();
|
_unityContainer.RegisterType<OrderDetailViewModel>();
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using eShopOnContainers.Core.Models.Catalog;
|
using eShopOnContainers.Core.Helpers;
|
||||||
|
using eShopOnContainers.Core.Models.Catalog;
|
||||||
using eShopOnContainers.Core.Models.Orders;
|
using eShopOnContainers.Core.Models.Orders;
|
||||||
using eShopOnContainers.Core.Services.Orders;
|
using eShopOnContainers.Core.Services.Orders;
|
||||||
using eShopOnContainers.Core.ViewModels.Base;
|
using eShopOnContainers.Core.ViewModels.Base;
|
||||||
@ -7,6 +8,7 @@ using System;
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.ViewModels
|
namespace eShopOnContainers.Core.ViewModels
|
||||||
@ -54,6 +56,8 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ICommand CheckoutCommand => new Command(Checkout);
|
||||||
|
|
||||||
public override Task InitializeAsync(object navigationData)
|
public override Task InitializeAsync(object navigationData)
|
||||||
{
|
{
|
||||||
MessagingCenter.Subscribe<CatalogViewModel, CatalogItem>(this, MessengerKeys.AddProduct, (sender, arg) =>
|
MessagingCenter.Subscribe<CatalogViewModel, CatalogItem>(this, MessengerKeys.AddProduct, (sender, arg) =>
|
||||||
@ -63,6 +67,11 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
AddCartItem(arg);
|
AddCartItem(arg);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
MessagingCenter.Subscribe<OrderItem>(this, MessengerKeys.UpdateProduct, (sender) =>
|
||||||
|
{
|
||||||
|
ReCalculateTotal();
|
||||||
|
});
|
||||||
|
|
||||||
OrderItems = new ObservableCollection<OrderItem>();
|
OrderItems = new ObservableCollection<OrderItem>();
|
||||||
|
|
||||||
return base.InitializeAsync(navigationData);
|
return base.InitializeAsync(navigationData);
|
||||||
@ -99,5 +108,10 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
Total += orderItem.Total;
|
Total += orderItem.Total;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Checkout()
|
||||||
|
{
|
||||||
|
NavigationService.NavigateToAsync<CheckoutViewModel>(OrderItems);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,6 +12,10 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
public class CatalogViewModel : ViewModelBase
|
public class CatalogViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
private ObservableCollection<CatalogItem> _products;
|
private ObservableCollection<CatalogItem> _products;
|
||||||
|
private ObservableCollection<CatalogBrand> _brands;
|
||||||
|
private CatalogBrand _brand;
|
||||||
|
private ObservableCollection<CatalogType> _types;
|
||||||
|
private CatalogType _type;
|
||||||
|
|
||||||
private ICatalogService _productsService;
|
private ICatalogService _productsService;
|
||||||
|
|
||||||
@ -30,13 +34,63 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<CatalogBrand> Brands
|
||||||
|
{
|
||||||
|
get { return _brands; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_brands = value;
|
||||||
|
RaisePropertyChanged(() => Brands);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CatalogBrand Brand
|
||||||
|
{
|
||||||
|
get { return _brand; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_brand = value;
|
||||||
|
RaisePropertyChanged(() => Brand);
|
||||||
|
RaisePropertyChanged(() => IsFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<CatalogType> Types
|
||||||
|
{
|
||||||
|
get { return _types; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_types = value;
|
||||||
|
RaisePropertyChanged(() => Types);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CatalogType Type
|
||||||
|
{
|
||||||
|
get { return _type; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_type = value;
|
||||||
|
RaisePropertyChanged(() => Type);
|
||||||
|
RaisePropertyChanged(() => IsFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsFilter { get { return Brand != null || Type != null; } }
|
||||||
|
|
||||||
public ICommand AddCatalogItemCommand => new Command<CatalogItem>(AddCatalogItem);
|
public ICommand AddCatalogItemCommand => new Command<CatalogItem>(AddCatalogItem);
|
||||||
|
|
||||||
|
public ICommand FilterCommand => new Command(Filter);
|
||||||
|
|
||||||
|
public ICommand ClearFilterCommand => new Command(ClearFilter);
|
||||||
|
|
||||||
public override async Task InitializeAsync(object navigationData)
|
public override async Task InitializeAsync(object navigationData)
|
||||||
{
|
{
|
||||||
IsBusy = true;
|
IsBusy = true;
|
||||||
|
|
||||||
Products = await _productsService.GetCatalogAsync();
|
Products = await _productsService.GetCatalogAsync();
|
||||||
|
Brands = await _productsService.GetCatalogBrandAsync();
|
||||||
|
Types = await _productsService.GetCatalogTypeAsync();
|
||||||
|
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
}
|
}
|
||||||
@ -45,5 +99,31 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
{
|
{
|
||||||
MessagingCenter.Send(this, MessengerKeys.AddProduct, catalogItem);
|
MessagingCenter.Send(this, MessengerKeys.AddProduct, catalogItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void Filter()
|
||||||
|
{
|
||||||
|
if(Brand == null && Type == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IsBusy = true;
|
||||||
|
|
||||||
|
MessagingCenter.Send(this, MessengerKeys.Filter);
|
||||||
|
Products = await _productsService.FilterAsync(Brand.Name, Type.Name);
|
||||||
|
|
||||||
|
IsBusy = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void ClearFilter()
|
||||||
|
{
|
||||||
|
IsBusy = true;
|
||||||
|
|
||||||
|
Brand = null;
|
||||||
|
Type = null;
|
||||||
|
Products = await _productsService.GetCatalogAsync();
|
||||||
|
|
||||||
|
IsBusy = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,106 @@
|
|||||||
|
using eShopOnContainers.Core.Models.Navigation;
|
||||||
|
using eShopOnContainers.Core.Services.User;
|
||||||
|
using eShopOnContainers.ViewModels.Base;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using eShopOnContainers.Core.Models.User;
|
||||||
|
using eShopOnContainers.Core.Models.Orders;
|
||||||
|
using System;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.ViewModels
|
||||||
|
{
|
||||||
|
public class CheckoutViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private ObservableCollection<OrderItem> _orderItems;
|
||||||
|
private Order _order;
|
||||||
|
private User _user;
|
||||||
|
|
||||||
|
private IUserService _userService;
|
||||||
|
|
||||||
|
public CheckoutViewModel(IUserService userService)
|
||||||
|
{
|
||||||
|
_userService = userService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<OrderItem> OrderItems
|
||||||
|
{
|
||||||
|
get { return _orderItems; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_orderItems = value;
|
||||||
|
RaisePropertyChanged(() => OrderItems);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Order Order
|
||||||
|
{
|
||||||
|
get { return _order; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_order = value;
|
||||||
|
RaisePropertyChanged(() => Order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public User User
|
||||||
|
{
|
||||||
|
get { return _user; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_user = value;
|
||||||
|
RaisePropertyChanged(() => User);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommand CheckoutCommand => new Command(Checkout);
|
||||||
|
|
||||||
|
public override async Task InitializeAsync(object navigationData)
|
||||||
|
{
|
||||||
|
if (navigationData is ObservableCollection<OrderItem>)
|
||||||
|
{
|
||||||
|
IsBusy = true;
|
||||||
|
|
||||||
|
var orderItems = ((ObservableCollection<OrderItem>)navigationData);
|
||||||
|
|
||||||
|
OrderItems = orderItems;
|
||||||
|
|
||||||
|
User = await _userService.GetUserAsync();
|
||||||
|
|
||||||
|
Order = new Order
|
||||||
|
{
|
||||||
|
ShippingAddress = User,
|
||||||
|
OrderItems = orderItems.ToList(),
|
||||||
|
Status = OrderStatus.Pending,
|
||||||
|
OrderDate = DateTime.Now,
|
||||||
|
Total = GetOrderTotal()
|
||||||
|
};
|
||||||
|
|
||||||
|
IsBusy = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Checkout()
|
||||||
|
{
|
||||||
|
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
|
||||||
|
await NavigationService.RemoveLastFromBackStackAsync();
|
||||||
|
|
||||||
|
await DialogService.ShowAlertAsync("Order sent successfully", string.Format("Order {0}", Order.OrderNumber), "Ok");
|
||||||
|
await NavigationService.RemoveLastFromBackStackAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private decimal GetOrderTotal()
|
||||||
|
{
|
||||||
|
decimal total = 0;
|
||||||
|
|
||||||
|
foreach (var orderItem in OrderItems)
|
||||||
|
{
|
||||||
|
total += orderItem.Total;
|
||||||
|
}
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,22 @@
|
|||||||
using eShopOnContainers.ViewModels.Base;
|
using System.Threading.Tasks;
|
||||||
|
using eShopOnContainers.ViewModels.Base;
|
||||||
|
using eShopOnContainers.Core.Models.Navigation;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using eShopOnContainers.Core.ViewModels.Base;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.ViewModels
|
namespace eShopOnContainers.Core.ViewModels
|
||||||
{
|
{
|
||||||
public class MainViewModel : ViewModelBase
|
public class MainViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
|
public override Task InitializeAsync(object navigationData)
|
||||||
|
{
|
||||||
|
if (navigationData is TabParameter)
|
||||||
|
{
|
||||||
|
var tabIndex = ((TabParameter)navigationData).TabIndex;
|
||||||
|
MessagingCenter.Send(this, MessengerKeys.ChangeTab, tabIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.InitializeAsync(navigationData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,21 +3,27 @@ using eShopOnContainers.Core.Models.Orders;
|
|||||||
using eShopOnContainers.ViewModels.Base;
|
using eShopOnContainers.ViewModels.Base;
|
||||||
using eShopOnContainers.Core.Services.Orders;
|
using eShopOnContainers.Core.Services.Orders;
|
||||||
using eShopOnContainers.Core.Services.Catalog;
|
using eShopOnContainers.Core.Services.Catalog;
|
||||||
|
using eShopOnContainers.Core.Services.User;
|
||||||
|
using eShopOnContainers.Core.Models.User;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.ViewModels
|
namespace eShopOnContainers.Core.ViewModels
|
||||||
{
|
{
|
||||||
public class OrderDetailViewModel : ViewModelBase
|
public class OrderDetailViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
private Order _order;
|
private Order _order;
|
||||||
|
private User _user;
|
||||||
|
|
||||||
private IOrdersService _orderService;
|
private IOrdersService _orderService;
|
||||||
private ICatalogService _catalogService;
|
private ICatalogService _catalogService;
|
||||||
|
private IUserService _userService;
|
||||||
|
|
||||||
public OrderDetailViewModel(IOrdersService orderService,
|
public OrderDetailViewModel(IOrdersService orderService,
|
||||||
ICatalogService catalogService)
|
ICatalogService catalogService,
|
||||||
|
IUserService userService)
|
||||||
{
|
{
|
||||||
_orderService = orderService;
|
_orderService = orderService;
|
||||||
_catalogService = catalogService;
|
_catalogService = catalogService;
|
||||||
|
_userService = userService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Order Order
|
public Order Order
|
||||||
@ -30,6 +36,16 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public User User
|
||||||
|
{
|
||||||
|
get { return _user; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_user = value;
|
||||||
|
RaisePropertyChanged(() => User);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override async Task InitializeAsync(object navigationData)
|
public override async Task InitializeAsync(object navigationData)
|
||||||
{
|
{
|
||||||
if(navigationData is Order)
|
if(navigationData is Order)
|
||||||
@ -45,6 +61,7 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
|
|
||||||
Order = order;
|
Order = order;
|
||||||
|
User = await _userService.GetUserAsync();
|
||||||
|
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@
|
|||||||
<ListView.ItemTemplate>
|
<ListView.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<ViewCell>
|
<ViewCell>
|
||||||
<templates:OrderItemTemplate />
|
<templates:CartOrderItemTemplate />
|
||||||
</ViewCell>
|
</ViewCell>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
Value="Center" />
|
Value="Center" />
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
|
|
||||||
<animations:StoryBoard
|
<animations:StoryBoard
|
||||||
x:Key="ProductsAnimation"
|
x:Key="ProductsAnimation"
|
||||||
Target="{x:Reference Products}">
|
Target="{x:Reference Products}">
|
||||||
@ -70,28 +69,39 @@
|
|||||||
</Grid.GestureRecognizers>
|
</Grid.GestureRecognizers>
|
||||||
</Grid>
|
</Grid>
|
||||||
<!-- CATALOG -->
|
<!-- CATALOG -->
|
||||||
<ListView
|
<Grid
|
||||||
x:Name="Products"
|
Grid.Row="1">
|
||||||
Grid.Row="1"
|
<ListView
|
||||||
ItemsSource="{Binding Products}"
|
x:Name="Products"
|
||||||
HasUnevenRows="True"
|
IsVisible="{Binding Products.Count, Converter={StaticResource CountToBoolConverter}}"
|
||||||
SeparatorVisibility="None"
|
ItemsSource="{Binding Products}"
|
||||||
CachingStrategy="RecycleElement"
|
HasUnevenRows="True"
|
||||||
Style="{StaticResource ProductsListStyle}">
|
SeparatorVisibility="None"
|
||||||
<ListView.Behaviors>
|
CachingStrategy="RecycleElement"
|
||||||
<behaviors:EventToCommandBehavior
|
Style="{StaticResource ProductsListStyle}">
|
||||||
EventName="ItemTapped"
|
<ListView.Behaviors>
|
||||||
Command="{Binding AddCatalogItemCommand}"
|
<behaviors:EventToCommandBehavior
|
||||||
EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" />
|
EventName="ItemTapped"
|
||||||
</ListView.Behaviors>
|
Command="{Binding AddCatalogItemCommand}"
|
||||||
<ListView.ItemTemplate>
|
EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" />
|
||||||
<DataTemplate>
|
</ListView.Behaviors>
|
||||||
<ViewCell>
|
<ListView.ItemTemplate>
|
||||||
<templates:ProductTemplate />
|
<DataTemplate>
|
||||||
</ViewCell>
|
<ViewCell>
|
||||||
</DataTemplate>
|
<templates:ProductTemplate />
|
||||||
</ListView.ItemTemplate>
|
</ViewCell>
|
||||||
</ListView>
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
</ListView>
|
||||||
|
<Grid
|
||||||
|
IsVisible="{Binding IsBusy, Converter={StaticResource InverseBoolConverter}}">
|
||||||
|
<Label
|
||||||
|
Text="NO PRODUCTS FOUND"
|
||||||
|
IsVisible="{Binding Products.Count, Converter={StaticResource InverseCountToBoolConverter}}"
|
||||||
|
HorizontalOptions="Center"
|
||||||
|
VerticalOptions="Center"/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
<!-- INDICATOR -->
|
<!-- INDICATOR -->
|
||||||
<ActivityIndicator
|
<ActivityIndicator
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
|
@ -1,16 +1,27 @@
|
|||||||
using System;
|
using System;
|
||||||
using SlideOverKit;
|
using SlideOverKit;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
using eShopOnContainers.Core.ViewModels.Base;
|
||||||
|
using eShopOnContainers.Core.ViewModels;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.Views
|
namespace eShopOnContainers.Core.Views
|
||||||
{
|
{
|
||||||
public partial class CatalogView : ContentPage, IMenuContainerPage
|
public partial class CatalogView : ContentPage, IMenuContainerPage
|
||||||
{
|
{
|
||||||
|
private FiltersView _filterView;
|
||||||
|
|
||||||
public CatalogView()
|
public CatalogView()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
SlideMenu = new FiltersView();
|
_filterView = new FiltersView();
|
||||||
|
|
||||||
|
SlideMenu = _filterView;
|
||||||
|
|
||||||
|
MessagingCenter.Subscribe<CatalogViewModel>(this, MessengerKeys.Filter, (sender) =>
|
||||||
|
{
|
||||||
|
Filter();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action HideMenuAction
|
public Action HideMenuAction
|
||||||
@ -31,7 +42,20 @@ namespace eShopOnContainers.Core.Views
|
|||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void OnBindingContextChanged()
|
||||||
|
{
|
||||||
|
base.OnBindingContextChanged();
|
||||||
|
|
||||||
|
_filterView.BindingContext = BindingContext;
|
||||||
|
}
|
||||||
|
|
||||||
private void OnFilterChanged(object sender, EventArgs e)
|
private void OnFilterChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Filter();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Filter()
|
||||||
{
|
{
|
||||||
if (SlideMenu.IsShown)
|
if (SlideMenu.IsShown)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,243 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="eShopOnContainers.Core.Views.CheckoutView"
|
||||||
|
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
||||||
|
Title="Checkout">
|
||||||
|
<ContentPage.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
|
||||||
|
<Style x:Key="OrderTitleStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource MediumSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="Gray" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="OrderContentStyle"
|
||||||
|
TargetType="{x:Type Label}"
|
||||||
|
BasedOn="{StaticResource OrderTitleStyle}">
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="Black" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="ShippingAddressStyle"
|
||||||
|
TargetType="{x:Type Label}"
|
||||||
|
BasedOn="{StaticResource OrderTitleStyle}">
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource LargeSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="Black" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="AddressStyle"
|
||||||
|
TargetType="{x:Type Label}"
|
||||||
|
BasedOn="{StaticResource OrderTitleStyle}">
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource LittleSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="Black" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="OrderTotalStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource LargerSize}" />
|
||||||
|
<Setter Property="HorizontalOptions"
|
||||||
|
Value="End" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="CheckoutButtonStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="{StaticResource WhiteColor}" />
|
||||||
|
<Setter Property="HorizontalOptions"
|
||||||
|
Value="Center" />
|
||||||
|
<Setter Property="VerticalOptions"
|
||||||
|
Value="Center" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
|
</ContentPage.Resources>
|
||||||
|
<Grid
|
||||||
|
BackgroundColor="{StaticResource BackgroundColor}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
<RowDefinition Height="60" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<!-- ORDER -->
|
||||||
|
<ScrollView
|
||||||
|
Grid.Row="0">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<!-- ORDER INFO -->
|
||||||
|
<Grid
|
||||||
|
x:Name="OrderInfo">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition />
|
||||||
|
<ColumnDefinition />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition />
|
||||||
|
<RowDefinition />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="0"
|
||||||
|
Margin="12">
|
||||||
|
<Label
|
||||||
|
Text="ORDER NUMBER"
|
||||||
|
Style="{StaticResource OrderTitleStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding Order.OrderNumber, Converter={StaticResource ToUpperConverter}}"
|
||||||
|
Style="{StaticResource OrderContentStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="12">
|
||||||
|
<Label
|
||||||
|
Text="TOTAL"
|
||||||
|
Style="{StaticResource OrderTitleStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding Order.Total, StringFormat='${0:N}', Converter={StaticResource ToUpperConverter}}"
|
||||||
|
Style="{StaticResource OrderContentStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="0"
|
||||||
|
Margin="12">
|
||||||
|
<Label
|
||||||
|
Text="DATE"
|
||||||
|
Style="{StaticResource OrderTitleStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding Order.OrderDate, Converter={StaticResource DatetimeConverter}}"
|
||||||
|
Style="{StaticResource OrderContentStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="12">
|
||||||
|
<Label
|
||||||
|
Text="STATUS"
|
||||||
|
Style="{StaticResource OrderTitleStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}"
|
||||||
|
Style="{StaticResource OrderContentStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
</Grid>
|
||||||
|
<!-- SHIPPING ADDRESS -->
|
||||||
|
<Grid
|
||||||
|
x:Name="ShippingAddress"
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="12">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Label
|
||||||
|
Grid.Row="0"
|
||||||
|
Text="SHIPPING ADDRESS"
|
||||||
|
Style="{StaticResource ShippingAddressStyle}"/>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="1">
|
||||||
|
<Label
|
||||||
|
Text="{Binding User.Street}"
|
||||||
|
Style="{StaticResource AddressStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding User.City}"
|
||||||
|
Style="{StaticResource AddressStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding User.CountryCode}"
|
||||||
|
Style="{StaticResource AddressStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding User.Country}"
|
||||||
|
Style="{StaticResource AddressStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
</Grid>
|
||||||
|
<!-- ORDER ITEMS -->
|
||||||
|
<Grid
|
||||||
|
x:Name="OrderItems"
|
||||||
|
Grid.Row="2">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ListView
|
||||||
|
Grid.Row="0"
|
||||||
|
ItemsSource="{Binding Order.OrderItems}"
|
||||||
|
HasUnevenRows="True"
|
||||||
|
SeparatorVisibility="None"
|
||||||
|
VerticalOptions="FillAndExpand"
|
||||||
|
CachingStrategy="RecycleElement">
|
||||||
|
<ListView.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ViewCell>
|
||||||
|
<templates:OrderItemTemplate />
|
||||||
|
</ViewCell>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
</ListView>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="0,0,0,24">
|
||||||
|
<Label
|
||||||
|
Grid.Row="0"
|
||||||
|
Text="TOTAL"
|
||||||
|
TextColor="{StaticResource BlackColor}"
|
||||||
|
Style="{StaticResource OrderTotalStyle}"/>
|
||||||
|
<Label
|
||||||
|
Grid.Row="1"
|
||||||
|
Text="{Binding Order.Total, StringFormat='${0:N}'}"
|
||||||
|
TextColor="{StaticResource GreenColor}"
|
||||||
|
Style="{StaticResource OrderTotalStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</ScrollView>
|
||||||
|
<!-- CHECKOUT -->
|
||||||
|
<Grid
|
||||||
|
Grid.Row="1"
|
||||||
|
BackgroundColor="{StaticResource LightGreenColor}"
|
||||||
|
Padding="0"
|
||||||
|
ColumnSpacing="0"
|
||||||
|
RowSpacing="0">
|
||||||
|
<Label
|
||||||
|
Text="[ CHECKOUT ]"
|
||||||
|
Style="{StaticResource CheckoutButtonStyle}"/>
|
||||||
|
<Grid.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer
|
||||||
|
Command="{Binding CheckoutCommand}"
|
||||||
|
NumberOfTapsRequired="1" />
|
||||||
|
</Grid.GestureRecognizers>
|
||||||
|
</Grid>
|
||||||
|
<!-- INDICATOR -->
|
||||||
|
<ActivityIndicator
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.RowSpan="2"
|
||||||
|
Color="{StaticResource LightGreenColor}"
|
||||||
|
IsRunning="{Binding IsBusy}"
|
||||||
|
IsVisible="{Binding IsBusy}"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
HorizontalOptions="Center">
|
||||||
|
<ActivityIndicator.WidthRequest>
|
||||||
|
<OnPlatform
|
||||||
|
x:TypeArguments="x:Double"
|
||||||
|
iOS="100"
|
||||||
|
Android="100"
|
||||||
|
WinPhone="400" />
|
||||||
|
</ActivityIndicator.WidthRequest>
|
||||||
|
</ActivityIndicator>
|
||||||
|
</Grid>
|
||||||
|
</ContentPage>
|
@ -0,0 +1,12 @@
|
|||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Views
|
||||||
|
{
|
||||||
|
public partial class CheckoutView : ContentPage
|
||||||
|
{
|
||||||
|
public CheckoutView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,64 +9,86 @@
|
|||||||
BackgroundColor="{StaticResource BackgroundColor}"
|
BackgroundColor="{StaticResource BackgroundColor}"
|
||||||
HeightRequest="250"
|
HeightRequest="250"
|
||||||
IsFullScreen="True">
|
IsFullScreen="True">
|
||||||
<slideOverKit:SlideMenuView.Resources>
|
<slideOverKit:SlideMenuView.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
|
|
||||||
<Style x:Key="FilterPickerStyle"
|
<Style x:Key="FilterPickerStyle"
|
||||||
TargetType="{x:Type controls:BindablePicker}">
|
TargetType="{x:Type controls:BindablePicker}">
|
||||||
<Setter Property="HeightRequest"
|
<Setter Property="HeightRequest"
|
||||||
Value="48" />
|
Value="48" />
|
||||||
<Setter Property="BackgroundColor"
|
<Setter Property="BackgroundColor"
|
||||||
Value="Transparent" />
|
Value="Transparent" />
|
||||||
<Setter Property="HorizontalOptions"
|
<Setter Property="HorizontalOptions"
|
||||||
Value="Fill" />
|
Value="Fill" />
|
||||||
<Setter Property="VerticalOptions"
|
<Setter Property="VerticalOptions"
|
||||||
Value="Fill" />
|
Value="Fill" />
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style x:Key="FilterButtonStyle"
|
<Style x:Key="FilterButtonStyle"
|
||||||
TargetType="{x:Type Button}">
|
TargetType="{x:Type Button}">
|
||||||
<Setter Property="FontFamily"
|
<Setter Property="FontFamily"
|
||||||
Value="{StaticResource MontserratRegular}" />
|
Value="{StaticResource MontserratRegular}" />
|
||||||
<Setter Property="TextColor"
|
<Setter Property="TextColor"
|
||||||
Value="{StaticResource WhiteColor}" />
|
Value="{StaticResource WhiteColor}" />
|
||||||
<Setter Property="BackgroundColor"
|
<Setter Property="BackgroundColor"
|
||||||
Value="{StaticResource LightGreenColor}" />
|
Value="{StaticResource LightGreenColor}" />
|
||||||
<Setter Property="HeightRequest"
|
<Setter Property="HeightRequest"
|
||||||
Value="48" />
|
Value="48" />
|
||||||
<Setter Property="BorderRadius"
|
<Setter Property="BorderRadius"
|
||||||
Value="0" />
|
Value="0" />
|
||||||
<Setter Property="BorderWidth"
|
<Setter Property="BorderWidth"
|
||||||
Value="0" />
|
Value="0" />
|
||||||
<Setter Property="HorizontalOptions"
|
<Setter Property="HorizontalOptions"
|
||||||
Value="Fill" />
|
Value="Fill" />
|
||||||
<Setter Property="VerticalOptions"
|
<Setter Property="VerticalOptions"
|
||||||
Value="Fill" />
|
Value="Fill" />
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
</ResourceDictionary>
|
<Style
|
||||||
</slideOverKit:SlideMenuView.Resources>
|
x:Key="ClearFilterButtonStyle"
|
||||||
<Grid
|
TargetType="{x:Type Button}"
|
||||||
Padding="0"
|
BasedOn="{StaticResource FilterButtonStyle}">
|
||||||
ColumnSpacing="0"
|
<Setter Property="TextColor"
|
||||||
RowSpacing="0"
|
Value="{StaticResource BlackColor}" />
|
||||||
Margin="48, 24">
|
<Setter Property="BackgroundColor"
|
||||||
<Grid.RowDefinitions>
|
Value="{StaticResource GrayColor}" />
|
||||||
<RowDefinition />
|
</Style>
|
||||||
<RowDefinition />
|
|
||||||
<RowDefinition />
|
</ResourceDictionary>
|
||||||
</Grid.RowDefinitions>
|
</slideOverKit:SlideMenuView.Resources>
|
||||||
<controls:BindablePicker
|
<Grid
|
||||||
Grid.Row="0"
|
Padding="0"
|
||||||
Title="BRAND"
|
ColumnSpacing="0"
|
||||||
Style="{StaticResource FilterPickerStyle}"/>
|
RowSpacing="0"
|
||||||
<controls:BindablePicker
|
Margin="48, 24">
|
||||||
Grid.Row="1"
|
<Grid.RowDefinitions>
|
||||||
Title="TYPE"
|
<RowDefinition />
|
||||||
Style="{StaticResource FilterPickerStyle}"/>
|
<RowDefinition />
|
||||||
<Button
|
<RowDefinition Height="Auto" />
|
||||||
Grid.Row="2"
|
<RowDefinition Height="Auto" />
|
||||||
Text="Apply"
|
</Grid.RowDefinitions>
|
||||||
Style="{StaticResource FilterButtonStyle}"/>
|
<controls:BindablePicker
|
||||||
</Grid>
|
Grid.Row="0"
|
||||||
|
Title="BRAND"
|
||||||
|
ItemsSource="{Binding Brands}"
|
||||||
|
SelectedItem="{Binding Brand, Mode=TwoWay}"
|
||||||
|
Style="{StaticResource FilterPickerStyle}"/>
|
||||||
|
<controls:BindablePicker
|
||||||
|
Grid.Row="1"
|
||||||
|
Title="TYPE"
|
||||||
|
ItemsSource="{Binding Types}"
|
||||||
|
SelectedItem="{Binding Type, Mode=TwoWay}"
|
||||||
|
Style="{StaticResource FilterPickerStyle}"/>
|
||||||
|
<Button
|
||||||
|
Grid.Row="2"
|
||||||
|
Text="Apply"
|
||||||
|
Style="{StaticResource FilterButtonStyle}"
|
||||||
|
Command="{Binding FilterCommand}"/>
|
||||||
|
<Button
|
||||||
|
Grid.Row="3"
|
||||||
|
Text="Clear"
|
||||||
|
IsVisible="{Binding IsFilter}"
|
||||||
|
Style="{StaticResource ClearFilterButtonStyle}"
|
||||||
|
Command="{Binding ClearFilterCommand}"/>
|
||||||
|
</Grid>
|
||||||
</slideOverKit:SlideMenuView>
|
</slideOverKit:SlideMenuView>
|
@ -1,4 +1,5 @@
|
|||||||
using eShopOnContainers.Core.ViewModels;
|
using eShopOnContainers.Core.ViewModels;
|
||||||
|
using eShopOnContainers.Core.ViewModels.Base;
|
||||||
using eShopOnContainers.ViewModels.Base;
|
using eShopOnContainers.ViewModels.Base;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
@ -15,6 +16,22 @@ namespace eShopOnContainers.Core.Views
|
|||||||
{
|
{
|
||||||
base.OnAppearing();
|
base.OnAppearing();
|
||||||
|
|
||||||
|
MessagingCenter.Subscribe<MainViewModel, int>(this, MessengerKeys.ChangeTab, (sender, arg) =>
|
||||||
|
{
|
||||||
|
switch(arg)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
CurrentPage = HomeView;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CurrentPage = ProfileView;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
CurrentPage = CartView;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var homeViewModel = ViewModelLocator.Instance.Resolve<CatalogViewModel>();
|
var homeViewModel = ViewModelLocator.Instance.Resolve<CatalogViewModel>();
|
||||||
await homeViewModel.InitializeAsync(null);
|
await homeViewModel.InitializeAsync(null);
|
||||||
HomeView.BindingContext = homeViewModel;
|
HomeView.BindingContext = homeViewModel;
|
||||||
|
@ -176,16 +176,16 @@
|
|||||||
<StackLayout
|
<StackLayout
|
||||||
Grid.Row="1">
|
Grid.Row="1">
|
||||||
<Label
|
<Label
|
||||||
Text="120 E 87th Street"
|
Text="{Binding User.Street}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="Seattle, WA"
|
Text="{Binding User.City}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="98122"
|
Text="{Binding User.CountryCode}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="United States"
|
Text="{Binding User.Country}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
@ -0,0 +1,134 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ContentView
|
||||||
|
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="eShopOnContainers.Core.Views.Templates.CartOrderItemTemplate"
|
||||||
|
xmlns:controls="clr-namespace:eShopOnContainers.Core.Controls;assembly=eShopOnContainers.Core"
|
||||||
|
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms">
|
||||||
|
<ContentView.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
|
||||||
|
<Style x:Key="OrderItemTitleStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource MediumSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="{StaticResource BlackColor}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="OrderItemUnitPriceStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource MidMediumSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="{StaticResource BlackColor}" />
|
||||||
|
<Setter Property="HorizontalOptions"
|
||||||
|
Value="Start" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="OrderItemQuantityStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource MidMediumSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="{StaticResource BlackColor}" />
|
||||||
|
<Setter Property="HorizontalOptions"
|
||||||
|
Value="End" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="OrderTotalStyle"
|
||||||
|
TargetType="{x:Type Label}">
|
||||||
|
<Setter Property="FontFamily"
|
||||||
|
Value="{StaticResource MontserratRegular}" />
|
||||||
|
<Setter Property="FontSize"
|
||||||
|
Value="{StaticResource LargerSize}" />
|
||||||
|
<Setter Property="TextColor"
|
||||||
|
Value="{StaticResource GreenColor}" />
|
||||||
|
<Setter Property="HorizontalOptions"
|
||||||
|
Value="End" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="QuantityPickerStyle"
|
||||||
|
TargetType="{x:Type controls:BindablePicker}">
|
||||||
|
<Setter Property="WidthRequest"
|
||||||
|
Value="36" />
|
||||||
|
<Setter Property="BackgroundColor"
|
||||||
|
Value="Transparent" />
|
||||||
|
<Setter Property="HorizontalOptions"
|
||||||
|
Value="End" />
|
||||||
|
<Setter Property="VerticalOptions"
|
||||||
|
Value="Fill" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
|
</ContentView.Resources>
|
||||||
|
<ContentView.Content>
|
||||||
|
<Grid
|
||||||
|
BackgroundColor="{StaticResource BackgroundColor}">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
<RowDefinition Height="1" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ffimageloading:CachedImage
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="0"
|
||||||
|
Source="{Binding ProductImage, Converter={StaticResource ImageConverter}}"
|
||||||
|
CacheDuration="30"
|
||||||
|
CacheType="Disk"
|
||||||
|
DownsampleToViewSize="True"
|
||||||
|
HeightRequest="108"
|
||||||
|
WidthRequest="108"
|
||||||
|
Aspect="AspectFit"
|
||||||
|
VerticalOptions="Start"
|
||||||
|
Margin="12,0,0,0"/>
|
||||||
|
<Grid
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="0"
|
||||||
|
Margin="6">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition />
|
||||||
|
<RowDefinition />
|
||||||
|
<RowDefinition />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Label
|
||||||
|
Grid.Row="0"
|
||||||
|
Text="{Binding ProductName, Converter={StaticResource ToUpperConverter}}"/>
|
||||||
|
<Grid
|
||||||
|
Grid.Row="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition />
|
||||||
|
<ColumnDefinition />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Label
|
||||||
|
Grid.Column="0"
|
||||||
|
Text="{Binding UnitPrice, StringFormat='${0:N}'}"
|
||||||
|
Style="{StaticResource OrderItemUnitPriceStyle}"/>
|
||||||
|
<controls:BindablePicker
|
||||||
|
Grid.Column="1"
|
||||||
|
ItemsSource="{Binding Numbers}"
|
||||||
|
SelectedItem="{Binding Quantity, Mode=TwoWay}"
|
||||||
|
Style="{StaticResource QuantityPickerStyle}"/>
|
||||||
|
</Grid>
|
||||||
|
<Label
|
||||||
|
Grid.Row="2"
|
||||||
|
Text="{Binding Total, StringFormat='${0:N}'}"
|
||||||
|
Style="{StaticResource OrderTotalStyle}"/>
|
||||||
|
</Grid>
|
||||||
|
<Grid
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Grid.Row="1"
|
||||||
|
BackgroundColor="Gray"/>
|
||||||
|
</Grid>
|
||||||
|
</ContentView.Content>
|
||||||
|
</ContentView>
|
@ -0,0 +1,12 @@
|
|||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Views.Templates
|
||||||
|
{
|
||||||
|
public partial class CartOrderItemTemplate : ContentView
|
||||||
|
{
|
||||||
|
public CartOrderItemTemplate()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -49,13 +49,19 @@
|
|||||||
<Compile Include="Converters\CountToBoolConverter.cs" />
|
<Compile Include="Converters\CountToBoolConverter.cs" />
|
||||||
<Compile Include="Converters\DatetimeConverter.cs" />
|
<Compile Include="Converters\DatetimeConverter.cs" />
|
||||||
<Compile Include="Converters\ImageConverter.cs" />
|
<Compile Include="Converters\ImageConverter.cs" />
|
||||||
|
<Compile Include="Converters\InverseBoolConverter.cs" />
|
||||||
<Compile Include="Converters\InverseCountToBoolConverter.cs" />
|
<Compile Include="Converters\InverseCountToBoolConverter.cs" />
|
||||||
<Compile Include="Converters\ItemTappedConverter.cs" />
|
<Compile Include="Converters\ItemTappedConverter.cs" />
|
||||||
<Compile Include="Converters\ToUpperConverter.cs" />
|
<Compile Include="Converters\ToUpperConverter.cs" />
|
||||||
<Compile Include="Effects\LineColorEffect.cs" />
|
<Compile Include="Effects\LineColorEffect.cs" />
|
||||||
<Compile Include="Extensions\AnimationExtension.cs" />
|
<Compile Include="Extensions\AnimationExtension.cs" />
|
||||||
|
<Compile Include="Extensions\ObservableExtension.cs" />
|
||||||
<Compile Include="GlobalSettings.cs" />
|
<Compile Include="GlobalSettings.cs" />
|
||||||
<Compile Include="Helpers\EasingHelper.cs" />
|
<Compile Include="Helpers\EasingHelper.cs" />
|
||||||
|
<Compile Include="Helpers\NumericHelper.cs" />
|
||||||
|
<Compile Include="Models\Catalog\CatalogBrand.cs" />
|
||||||
|
<Compile Include="Models\Catalog\CatalogType.cs" />
|
||||||
|
<Compile Include="Models\Navigation\TabParameter.cs" />
|
||||||
<Compile Include="Models\Orders\Order.cs" />
|
<Compile Include="Models\Orders\Order.cs" />
|
||||||
<Compile Include="Models\Orders\OrderItem.cs" />
|
<Compile Include="Models\Orders\OrderItem.cs" />
|
||||||
<Compile Include="Models\Orders\OrderStatus.cs" />
|
<Compile Include="Models\Orders\OrderStatus.cs" />
|
||||||
@ -72,6 +78,8 @@
|
|||||||
<Compile Include="Services\Orders\IOrdersService.cs" />
|
<Compile Include="Services\Orders\IOrdersService.cs" />
|
||||||
<Compile Include="Services\Catalog\CatalogMockService.cs" />
|
<Compile Include="Services\Catalog\CatalogMockService.cs" />
|
||||||
<Compile Include="Services\Catalog\ICatalogService.cs" />
|
<Compile Include="Services\Catalog\ICatalogService.cs" />
|
||||||
|
<Compile Include="Services\User\IUserService.cs" />
|
||||||
|
<Compile Include="Services\User\UserMockService.cs" />
|
||||||
<Compile Include="Triggers\BeginAnimation.cs" />
|
<Compile Include="Triggers\BeginAnimation.cs" />
|
||||||
<Compile Include="Validations\IsNotNullOrEmptyRule.cs" />
|
<Compile Include="Validations\IsNotNullOrEmptyRule.cs" />
|
||||||
<Compile Include="Validations\IValidationRule.cs" />
|
<Compile Include="Validations\IValidationRule.cs" />
|
||||||
@ -83,6 +91,7 @@
|
|||||||
<Compile Include="ViewModels\Base\ViewModelLocator.cs" />
|
<Compile Include="ViewModels\Base\ViewModelLocator.cs" />
|
||||||
<Compile Include="ViewModels\CartViewModel.cs" />
|
<Compile Include="ViewModels\CartViewModel.cs" />
|
||||||
<Compile Include="ViewModels\CatalogViewModel.cs" />
|
<Compile Include="ViewModels\CatalogViewModel.cs" />
|
||||||
|
<Compile Include="ViewModels\CheckoutViewModel.cs" />
|
||||||
<Compile Include="ViewModels\LoginViewModel.cs" />
|
<Compile Include="ViewModels\LoginViewModel.cs" />
|
||||||
<Compile Include="ViewModels\MainViewModel.cs" />
|
<Compile Include="ViewModels\MainViewModel.cs" />
|
||||||
<Compile Include="ViewModels\OrderDetailViewModel.cs" />
|
<Compile Include="ViewModels\OrderDetailViewModel.cs" />
|
||||||
@ -90,6 +99,9 @@
|
|||||||
<Compile Include="Views\CartView.xaml.cs">
|
<Compile Include="Views\CartView.xaml.cs">
|
||||||
<DependentUpon>CartView.xaml</DependentUpon>
|
<DependentUpon>CartView.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Views\CheckoutView.xaml.cs">
|
||||||
|
<DependentUpon>CheckoutView.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Views\CustomNavigationPage.xaml.cs">
|
<Compile Include="Views\CustomNavigationPage.xaml.cs">
|
||||||
<DependentUpon>CustomNavigationPage.xaml</DependentUpon>
|
<DependentUpon>CustomNavigationPage.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -111,6 +123,9 @@
|
|||||||
<Compile Include="Views\ProfileView.xaml.cs">
|
<Compile Include="Views\ProfileView.xaml.cs">
|
||||||
<DependentUpon>ProfileView.xaml</DependentUpon>
|
<DependentUpon>ProfileView.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Views\Templates\CartOrderItemTemplate.xaml.cs">
|
||||||
|
<DependentUpon>CartOrderItemTemplate.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Views\Templates\OrderItemTemplate.xaml.cs">
|
<Compile Include="Views\Templates\OrderItemTemplate.xaml.cs">
|
||||||
<DependentUpon>OrderItemTemplate.xaml</DependentUpon>
|
<DependentUpon>OrderItemTemplate.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -267,6 +282,18 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Views\CheckoutView.xaml">
|
||||||
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Views\Templates\CartOrderItemTemplate.xaml">
|
||||||
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
@ -4,6 +4,7 @@ using Android.Content.PM;
|
|||||||
using Android.Views;
|
using Android.Views;
|
||||||
using Xamarin.Forms.Platform.Android;
|
using Xamarin.Forms.Platform.Android;
|
||||||
using FFImageLoading.Forms.Droid;
|
using FFImageLoading.Forms.Droid;
|
||||||
|
using Acr.UserDialogs;
|
||||||
|
|
||||||
namespace eShopOnContainers.Droid.Activities
|
namespace eShopOnContainers.Droid.Activities
|
||||||
{
|
{
|
||||||
@ -28,6 +29,7 @@ namespace eShopOnContainers.Droid.Activities
|
|||||||
SupportActionBar.SetDisplayShowTitleEnabled(false);
|
SupportActionBar.SetDisplayShowTitleEnabled(false);
|
||||||
|
|
||||||
global::Xamarin.Forms.Forms.Init(this, bundle);
|
global::Xamarin.Forms.Forms.Init(this, bundle);
|
||||||
|
UserDialogs.Init(this);
|
||||||
CachedImageRenderer.Init();
|
CachedImageRenderer.Init();
|
||||||
LoadApplication(new App());
|
LoadApplication(new App());
|
||||||
|
|
||||||
|
@ -2039,289 +2039,295 @@ namespace eShopOnContainers.Droid
|
|||||||
public const int fake_product_03 = 2130837584;
|
public const int fake_product_03 = 2130837584;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020051
|
// aapt resource value: 0x7f020051
|
||||||
public const int ic_audiotrack = 2130837585;
|
public const int fake_product_04 = 2130837585;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020052
|
// aapt resource value: 0x7f020052
|
||||||
public const int ic_audiotrack_light = 2130837586;
|
public const int fake_product_05 = 2130837586;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020053
|
// aapt resource value: 0x7f020053
|
||||||
public const int ic_bluetooth_grey = 2130837587;
|
public const int ic_audiotrack = 2130837587;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020054
|
// aapt resource value: 0x7f020054
|
||||||
public const int ic_bluetooth_white = 2130837588;
|
public const int ic_audiotrack_light = 2130837588;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020055
|
// aapt resource value: 0x7f020055
|
||||||
public const int ic_cast_dark = 2130837589;
|
public const int ic_bluetooth_grey = 2130837589;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020056
|
// aapt resource value: 0x7f020056
|
||||||
public const int ic_cast_disabled_light = 2130837590;
|
public const int ic_bluetooth_white = 2130837590;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020057
|
// aapt resource value: 0x7f020057
|
||||||
public const int ic_cast_grey = 2130837591;
|
public const int ic_cast_dark = 2130837591;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020058
|
// aapt resource value: 0x7f020058
|
||||||
public const int ic_cast_light = 2130837592;
|
public const int ic_cast_disabled_light = 2130837592;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020059
|
// aapt resource value: 0x7f020059
|
||||||
public const int ic_cast_off_light = 2130837593;
|
public const int ic_cast_grey = 2130837593;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02005a
|
// aapt resource value: 0x7f02005a
|
||||||
public const int ic_cast_on_0_light = 2130837594;
|
public const int ic_cast_light = 2130837594;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02005b
|
// aapt resource value: 0x7f02005b
|
||||||
public const int ic_cast_on_1_light = 2130837595;
|
public const int ic_cast_off_light = 2130837595;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02005c
|
// aapt resource value: 0x7f02005c
|
||||||
public const int ic_cast_on_2_light = 2130837596;
|
public const int ic_cast_on_0_light = 2130837596;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02005d
|
// aapt resource value: 0x7f02005d
|
||||||
public const int ic_cast_on_light = 2130837597;
|
public const int ic_cast_on_1_light = 2130837597;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02005e
|
// aapt resource value: 0x7f02005e
|
||||||
public const int ic_cast_white = 2130837598;
|
public const int ic_cast_on_2_light = 2130837598;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02005f
|
// aapt resource value: 0x7f02005f
|
||||||
public const int ic_close_dark = 2130837599;
|
public const int ic_cast_on_light = 2130837599;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020060
|
// aapt resource value: 0x7f020060
|
||||||
public const int ic_close_light = 2130837600;
|
public const int ic_cast_white = 2130837600;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020061
|
// aapt resource value: 0x7f020061
|
||||||
public const int ic_collapse = 2130837601;
|
public const int ic_close_dark = 2130837601;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020062
|
// aapt resource value: 0x7f020062
|
||||||
public const int ic_collapse_00000 = 2130837602;
|
public const int ic_close_light = 2130837602;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020063
|
// aapt resource value: 0x7f020063
|
||||||
public const int ic_collapse_00001 = 2130837603;
|
public const int ic_collapse = 2130837603;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020064
|
// aapt resource value: 0x7f020064
|
||||||
public const int ic_collapse_00002 = 2130837604;
|
public const int ic_collapse_00000 = 2130837604;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020065
|
// aapt resource value: 0x7f020065
|
||||||
public const int ic_collapse_00003 = 2130837605;
|
public const int ic_collapse_00001 = 2130837605;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020066
|
// aapt resource value: 0x7f020066
|
||||||
public const int ic_collapse_00004 = 2130837606;
|
public const int ic_collapse_00002 = 2130837606;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020067
|
// aapt resource value: 0x7f020067
|
||||||
public const int ic_collapse_00005 = 2130837607;
|
public const int ic_collapse_00003 = 2130837607;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020068
|
// aapt resource value: 0x7f020068
|
||||||
public const int ic_collapse_00006 = 2130837608;
|
public const int ic_collapse_00004 = 2130837608;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020069
|
// aapt resource value: 0x7f020069
|
||||||
public const int ic_collapse_00007 = 2130837609;
|
public const int ic_collapse_00005 = 2130837609;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02006a
|
// aapt resource value: 0x7f02006a
|
||||||
public const int ic_collapse_00008 = 2130837610;
|
public const int ic_collapse_00006 = 2130837610;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02006b
|
// aapt resource value: 0x7f02006b
|
||||||
public const int ic_collapse_00009 = 2130837611;
|
public const int ic_collapse_00007 = 2130837611;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02006c
|
// aapt resource value: 0x7f02006c
|
||||||
public const int ic_collapse_00010 = 2130837612;
|
public const int ic_collapse_00008 = 2130837612;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02006d
|
// aapt resource value: 0x7f02006d
|
||||||
public const int ic_collapse_00011 = 2130837613;
|
public const int ic_collapse_00009 = 2130837613;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02006e
|
// aapt resource value: 0x7f02006e
|
||||||
public const int ic_collapse_00012 = 2130837614;
|
public const int ic_collapse_00010 = 2130837614;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02006f
|
// aapt resource value: 0x7f02006f
|
||||||
public const int ic_collapse_00013 = 2130837615;
|
public const int ic_collapse_00011 = 2130837615;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020070
|
// aapt resource value: 0x7f020070
|
||||||
public const int ic_collapse_00014 = 2130837616;
|
public const int ic_collapse_00012 = 2130837616;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020071
|
// aapt resource value: 0x7f020071
|
||||||
public const int ic_collapse_00015 = 2130837617;
|
public const int ic_collapse_00013 = 2130837617;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020072
|
// aapt resource value: 0x7f020072
|
||||||
public const int ic_errorstatus = 2130837618;
|
public const int ic_collapse_00014 = 2130837618;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020073
|
// aapt resource value: 0x7f020073
|
||||||
public const int ic_expand = 2130837619;
|
public const int ic_collapse_00015 = 2130837619;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020074
|
// aapt resource value: 0x7f020074
|
||||||
public const int ic_expand_00000 = 2130837620;
|
public const int ic_errorstatus = 2130837620;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020075
|
// aapt resource value: 0x7f020075
|
||||||
public const int ic_expand_00001 = 2130837621;
|
public const int ic_expand = 2130837621;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020076
|
// aapt resource value: 0x7f020076
|
||||||
public const int ic_expand_00002 = 2130837622;
|
public const int ic_expand_00000 = 2130837622;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020077
|
// aapt resource value: 0x7f020077
|
||||||
public const int ic_expand_00003 = 2130837623;
|
public const int ic_expand_00001 = 2130837623;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020078
|
// aapt resource value: 0x7f020078
|
||||||
public const int ic_expand_00004 = 2130837624;
|
public const int ic_expand_00002 = 2130837624;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020079
|
// aapt resource value: 0x7f020079
|
||||||
public const int ic_expand_00005 = 2130837625;
|
public const int ic_expand_00003 = 2130837625;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02007a
|
// aapt resource value: 0x7f02007a
|
||||||
public const int ic_expand_00006 = 2130837626;
|
public const int ic_expand_00004 = 2130837626;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02007b
|
// aapt resource value: 0x7f02007b
|
||||||
public const int ic_expand_00007 = 2130837627;
|
public const int ic_expand_00005 = 2130837627;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02007c
|
// aapt resource value: 0x7f02007c
|
||||||
public const int ic_expand_00008 = 2130837628;
|
public const int ic_expand_00006 = 2130837628;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02007d
|
// aapt resource value: 0x7f02007d
|
||||||
public const int ic_expand_00009 = 2130837629;
|
public const int ic_expand_00007 = 2130837629;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02007e
|
// aapt resource value: 0x7f02007e
|
||||||
public const int ic_expand_00010 = 2130837630;
|
public const int ic_expand_00008 = 2130837630;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02007f
|
// aapt resource value: 0x7f02007f
|
||||||
public const int ic_expand_00011 = 2130837631;
|
public const int ic_expand_00009 = 2130837631;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020080
|
// aapt resource value: 0x7f020080
|
||||||
public const int ic_expand_00012 = 2130837632;
|
public const int ic_expand_00010 = 2130837632;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020081
|
// aapt resource value: 0x7f020081
|
||||||
public const int ic_expand_00013 = 2130837633;
|
public const int ic_expand_00011 = 2130837633;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020082
|
// aapt resource value: 0x7f020082
|
||||||
public const int ic_expand_00014 = 2130837634;
|
public const int ic_expand_00012 = 2130837634;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020083
|
// aapt resource value: 0x7f020083
|
||||||
public const int ic_expand_00015 = 2130837635;
|
public const int ic_expand_00013 = 2130837635;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020084
|
// aapt resource value: 0x7f020084
|
||||||
public const int ic_media_pause = 2130837636;
|
public const int ic_expand_00014 = 2130837636;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020085
|
// aapt resource value: 0x7f020085
|
||||||
public const int ic_media_play = 2130837637;
|
public const int ic_expand_00015 = 2130837637;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020086
|
// aapt resource value: 0x7f020086
|
||||||
public const int ic_media_route_disabled_mono_dark = 2130837638;
|
public const int ic_media_pause = 2130837638;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020087
|
// aapt resource value: 0x7f020087
|
||||||
public const int ic_media_route_off_mono_dark = 2130837639;
|
public const int ic_media_play = 2130837639;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020088
|
// aapt resource value: 0x7f020088
|
||||||
public const int ic_media_route_on_0_mono_dark = 2130837640;
|
public const int ic_media_route_disabled_mono_dark = 2130837640;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020089
|
// aapt resource value: 0x7f020089
|
||||||
public const int ic_media_route_on_1_mono_dark = 2130837641;
|
public const int ic_media_route_off_mono_dark = 2130837641;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02008a
|
// aapt resource value: 0x7f02008a
|
||||||
public const int ic_media_route_on_2_mono_dark = 2130837642;
|
public const int ic_media_route_on_0_mono_dark = 2130837642;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02008b
|
// aapt resource value: 0x7f02008b
|
||||||
public const int ic_media_route_on_mono_dark = 2130837643;
|
public const int ic_media_route_on_1_mono_dark = 2130837643;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02008c
|
// aapt resource value: 0x7f02008c
|
||||||
public const int ic_pause_dark = 2130837644;
|
public const int ic_media_route_on_2_mono_dark = 2130837644;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02008d
|
// aapt resource value: 0x7f02008d
|
||||||
public const int ic_pause_light = 2130837645;
|
public const int ic_media_route_on_mono_dark = 2130837645;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02008e
|
// aapt resource value: 0x7f02008e
|
||||||
public const int ic_play_dark = 2130837646;
|
public const int ic_pause_dark = 2130837646;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02008f
|
// aapt resource value: 0x7f02008f
|
||||||
public const int ic_play_light = 2130837647;
|
public const int ic_pause_light = 2130837647;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020090
|
// aapt resource value: 0x7f020090
|
||||||
public const int ic_speaker_dark = 2130837648;
|
public const int ic_play_dark = 2130837648;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020091
|
// aapt resource value: 0x7f020091
|
||||||
public const int ic_speaker_group_dark = 2130837649;
|
public const int ic_play_light = 2130837649;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020092
|
// aapt resource value: 0x7f020092
|
||||||
public const int ic_speaker_group_light = 2130837650;
|
public const int ic_speaker_dark = 2130837650;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020093
|
// aapt resource value: 0x7f020093
|
||||||
public const int ic_speaker_light = 2130837651;
|
public const int ic_speaker_group_dark = 2130837651;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020094
|
// aapt resource value: 0x7f020094
|
||||||
public const int ic_successstatus = 2130837652;
|
public const int ic_speaker_group_light = 2130837652;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020095
|
// aapt resource value: 0x7f020095
|
||||||
public const int ic_tv_dark = 2130837653;
|
public const int ic_speaker_light = 2130837653;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020096
|
// aapt resource value: 0x7f020096
|
||||||
public const int ic_tv_light = 2130837654;
|
public const int ic_successstatus = 2130837654;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020097
|
// aapt resource value: 0x7f020097
|
||||||
public const int icon = 2130837655;
|
public const int ic_tv_dark = 2130837655;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020098
|
// aapt resource value: 0x7f020098
|
||||||
public const int menu_cart = 2130837656;
|
public const int ic_tv_light = 2130837656;
|
||||||
|
|
||||||
// aapt resource value: 0x7f020099
|
// aapt resource value: 0x7f020099
|
||||||
public const int menu_filter = 2130837657;
|
public const int icon = 2130837657;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02009a
|
// aapt resource value: 0x7f02009a
|
||||||
public const int menu_profile = 2130837658;
|
public const int menu_cart = 2130837658;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02009b
|
// aapt resource value: 0x7f02009b
|
||||||
public const int mr_dialog_material_background_dark = 2130837659;
|
public const int menu_filter = 2130837659;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02009c
|
// aapt resource value: 0x7f02009c
|
||||||
public const int mr_dialog_material_background_light = 2130837660;
|
public const int menu_profile = 2130837660;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02009d
|
// aapt resource value: 0x7f02009d
|
||||||
public const int mr_ic_audiotrack_light = 2130837661;
|
public const int mr_dialog_material_background_dark = 2130837661;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02009e
|
// aapt resource value: 0x7f02009e
|
||||||
public const int mr_ic_cast_dark = 2130837662;
|
public const int mr_dialog_material_background_light = 2130837662;
|
||||||
|
|
||||||
// aapt resource value: 0x7f02009f
|
// aapt resource value: 0x7f02009f
|
||||||
public const int mr_ic_cast_light = 2130837663;
|
public const int mr_ic_audiotrack_light = 2130837663;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a0
|
// aapt resource value: 0x7f0200a0
|
||||||
public const int mr_ic_close_dark = 2130837664;
|
public const int mr_ic_cast_dark = 2130837664;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a1
|
// aapt resource value: 0x7f0200a1
|
||||||
public const int mr_ic_close_light = 2130837665;
|
public const int mr_ic_cast_light = 2130837665;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a2
|
// aapt resource value: 0x7f0200a2
|
||||||
public const int mr_ic_media_route_connecting_mono_dark = 2130837666;
|
public const int mr_ic_close_dark = 2130837666;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a3
|
// aapt resource value: 0x7f0200a3
|
||||||
public const int mr_ic_media_route_connecting_mono_light = 2130837667;
|
public const int mr_ic_close_light = 2130837667;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a4
|
// aapt resource value: 0x7f0200a4
|
||||||
public const int mr_ic_media_route_mono_dark = 2130837668;
|
public const int mr_ic_media_route_connecting_mono_dark = 2130837668;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a5
|
// aapt resource value: 0x7f0200a5
|
||||||
public const int mr_ic_media_route_mono_light = 2130837669;
|
public const int mr_ic_media_route_connecting_mono_light = 2130837669;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a6
|
// aapt resource value: 0x7f0200a6
|
||||||
public const int mr_ic_pause_dark = 2130837670;
|
public const int mr_ic_media_route_mono_dark = 2130837670;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a7
|
// aapt resource value: 0x7f0200a7
|
||||||
public const int mr_ic_pause_light = 2130837671;
|
public const int mr_ic_media_route_mono_light = 2130837671;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a8
|
// aapt resource value: 0x7f0200a8
|
||||||
public const int mr_ic_play_dark = 2130837672;
|
public const int mr_ic_pause_dark = 2130837672;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200a9
|
// aapt resource value: 0x7f0200a9
|
||||||
public const int mr_ic_play_light = 2130837673;
|
public const int mr_ic_pause_light = 2130837673;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200af
|
|
||||||
public const int notification_template_icon_bg = 2130837679;
|
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200aa
|
// aapt resource value: 0x7f0200aa
|
||||||
public const int product_add = 2130837674;
|
public const int mr_ic_play_dark = 2130837674;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200ab
|
// aapt resource value: 0x7f0200ab
|
||||||
public const int roundedbg = 2130837675;
|
public const int mr_ic_play_light = 2130837675;
|
||||||
|
|
||||||
|
// aapt resource value: 0x7f0200b1
|
||||||
|
public const int notification_template_icon_bg = 2130837681;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200ac
|
// aapt resource value: 0x7f0200ac
|
||||||
public const int roundedbgdark = 2130837676;
|
public const int product_add = 2130837676;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200ad
|
// aapt resource value: 0x7f0200ad
|
||||||
public const int splash_drawable = 2130837677;
|
public const int roundedbg = 2130837677;
|
||||||
|
|
||||||
// aapt resource value: 0x7f0200ae
|
// aapt resource value: 0x7f0200ae
|
||||||
public const int user_profile = 2130837678;
|
public const int roundedbgdark = 2130837678;
|
||||||
|
|
||||||
|
// aapt resource value: 0x7f0200af
|
||||||
|
public const int splash_drawable = 2130837679;
|
||||||
|
|
||||||
|
// aapt resource value: 0x7f0200b0
|
||||||
|
public const int user_profile = 2130837680;
|
||||||
|
|
||||||
static Drawable()
|
static Drawable()
|
||||||
{
|
{
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
Binary file not shown.
After Width: | Height: | Size: 498 KiB |
@ -322,6 +322,12 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AndroidResource Include="Resources\drawable-xxxhdpi\background.png" />
|
<AndroidResource Include="Resources\drawable-xxxhdpi\background.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AndroidResource Include="Resources\drawable\fake_product_04.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AndroidResource Include="Resources\drawable\fake_product_05.png" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||||
<Import Project="..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" />
|
<Import Project="..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
Binary file not shown.
After Width: | Height: | Size: 498 KiB |
@ -122,6 +122,8 @@
|
|||||||
<Content Include="Assets\fake_product_01.png" />
|
<Content Include="Assets\fake_product_01.png" />
|
||||||
<Content Include="Assets\fake_product_02.png" />
|
<Content Include="Assets\fake_product_02.png" />
|
||||||
<Content Include="Assets\fake_product_03.png" />
|
<Content Include="Assets\fake_product_03.png" />
|
||||||
|
<Content Include="Assets\fake_product_04.png" />
|
||||||
|
<Content Include="Assets\fake_product_05.png" />
|
||||||
<Content Include="Assets\menu_cart.png" />
|
<Content Include="Assets\menu_cart.png" />
|
||||||
<Content Include="Assets\menu_filter.png" />
|
<Content Include="Assets\menu_filter.png" />
|
||||||
<Content Include="Assets\menu_profile.png" />
|
<Content Include="Assets\menu_profile.png" />
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
Binary file not shown.
After Width: | Height: | Size: 498 KiB |
@ -240,6 +240,12 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<BundleResource Include="Resources\fake_product_02.png" />
|
<BundleResource Include="Resources\fake_product_02.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BundleResource Include="Resources\fake_product_04.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BundleResource Include="Resources\fake_product_05.png" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user