OrderDetail mobile apps view
This commit is contained in:
Родитель
068eb3bed9
Коммит
6ee3659f2c
|
@ -54,6 +54,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.iOS", "sr
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Windows", "src\Mobile\eShopOnContainers\eShopOnContainers.Windows\eShopOnContainers.Windows.csproj", "{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared Code", "Shared Code", "{778289CA-31F7-4464-8C2A-612EE846F8A7}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{9CC7814B-72A6-465B-A61C-57B512DEE303}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
|
||||
|
@ -523,9 +527,11 @@ Global
|
|||
{48FC45C5-223F-4B59-AC77-6CBB1C561E85} = {932D8224-11F6-4D07-B109-DA28AD288A63}
|
||||
{C10C7B69-CE4F-4167-928E-33B7FA1DFFC7} = {48FC45C5-223F-4B59-AC77-6CBB1C561E85}
|
||||
{F0333D8E-0B27-42B7-B2C6-78F3657624E2} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
|
||||
{65116D1C-145B-4693-ABDA-F0FB6F425191} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
|
||||
{62DBB163-9CA9-4818-B48B-13233DF37C24} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
|
||||
{6EEB23DC-7063-4444-9AF8-90DF24F549C0} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
|
||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
|
||||
{65116D1C-145B-4693-ABDA-F0FB6F425191} = {778289CA-31F7-4464-8C2A-612EE846F8A7}
|
||||
{62DBB163-9CA9-4818-B48B-13233DF37C24} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
|
||||
{6EEB23DC-7063-4444-9AF8-90DF24F549C0} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
|
||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
|
||||
{778289CA-31F7-4464-8C2A-612EE846F8A7} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
|
||||
{9CC7814B-72A6-465B-A61C-57B512DEE303} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -11,6 +11,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "e
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Windows", "eShopOnContainers\eShopOnContainers.Windows\eShopOnContainers.Windows.csproj", "{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared Code", "Shared Code", "{65D002E7-E869-491C-ABA8-9650CEAF677A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{8F848898-6B21-4905-AE2E-B3ABDEDA1963}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
|
||||
|
@ -258,4 +262,10 @@ Global
|
|||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{62DBB163-9CA9-4818-B48B-13233DF37C24} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
|
||||
{6EEB23DC-7063-4444-9AF8-90DF24F549C0} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
|
||||
{65116D1C-145B-4693-ABDA-F0FB6F425191} = {65D002E7-E869-491C-ABA8-9650CEAF677A}
|
||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -100,6 +100,8 @@
|
|||
<!-- CONVERTERS -->
|
||||
<converters:ToUpperConverter x:Key="ToUpperConverter" />
|
||||
<converters:DatetimeConverter x:Key="DatetimeConverter" />
|
||||
<converters:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" />
|
||||
|
||||
<!-- STYLES -->
|
||||
<Style x:Key="EntryStyle"
|
||||
TargetType="{x:Type Entry}">
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
using System;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Behaviors.Base
|
||||
{
|
||||
public class BindableBehavior<T> : Behavior<T> where T : BindableObject
|
||||
{
|
||||
public T AssociatedObject { get; private set; }
|
||||
|
||||
protected override void OnAttachedTo(T visualElement)
|
||||
{
|
||||
base.OnAttachedTo(visualElement);
|
||||
|
||||
AssociatedObject = visualElement;
|
||||
|
||||
if (visualElement.BindingContext != null)
|
||||
BindingContext = visualElement.BindingContext;
|
||||
|
||||
visualElement.BindingContextChanged += OnBindingContextChanged;
|
||||
}
|
||||
|
||||
private void OnBindingContextChanged(object sender, EventArgs e)
|
||||
{
|
||||
OnBindingContextChanged();
|
||||
}
|
||||
|
||||
protected override void OnDetachingFrom(T view)
|
||||
{
|
||||
view.BindingContextChanged -= OnBindingContextChanged;
|
||||
}
|
||||
|
||||
protected override void OnBindingContextChanged()
|
||||
{
|
||||
base.OnBindingContextChanged();
|
||||
BindingContext = AssociatedObject.BindingContext;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
using eShopOnContainers.Core.Behaviors.Base;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Behaviors
|
||||
{
|
||||
public class EventToCommandBehavior : BindableBehavior<View>
|
||||
{
|
||||
public static BindableProperty EventNameProperty =
|
||||
BindableProperty.CreateAttached("EventName", typeof(string), typeof(EventToCommandBehavior), null,
|
||||
BindingMode.OneWay);
|
||||
|
||||
public static BindableProperty CommandProperty =
|
||||
BindableProperty.CreateAttached("Command", typeof(ICommand), typeof(EventToCommandBehavior), null,
|
||||
BindingMode.OneWay);
|
||||
|
||||
public static BindableProperty CommandParameterProperty =
|
||||
BindableProperty.CreateAttached("CommandParameter", typeof(object), typeof(EventToCommandBehavior), null,
|
||||
BindingMode.OneWay);
|
||||
|
||||
public static BindableProperty EventArgsConverterProperty =
|
||||
BindableProperty.CreateAttached("EventArgsConverter", typeof(IValueConverter), typeof(EventToCommandBehavior), null,
|
||||
BindingMode.OneWay);
|
||||
|
||||
public static BindableProperty EventArgsConverterParameterProperty =
|
||||
BindableProperty.CreateAttached("EventArgsConverterParameter", typeof(object), typeof(EventToCommandBehavior), null,
|
||||
BindingMode.OneWay);
|
||||
|
||||
private Delegate _handler;
|
||||
private EventInfo _eventInfo;
|
||||
|
||||
public string EventName
|
||||
{
|
||||
get { return (string)GetValue(EventNameProperty); }
|
||||
set { SetValue(EventNameProperty, value); }
|
||||
}
|
||||
|
||||
public ICommand Command
|
||||
{
|
||||
get { return (ICommand)GetValue(CommandProperty); }
|
||||
set { SetValue(CommandProperty, value); }
|
||||
}
|
||||
|
||||
public object CommandParameter
|
||||
{
|
||||
get { return GetValue(CommandParameterProperty); }
|
||||
set { SetValue(CommandParameterProperty, value); }
|
||||
}
|
||||
|
||||
public IValueConverter EventArgsConverter
|
||||
{
|
||||
get { return (IValueConverter)GetValue(EventArgsConverterProperty); }
|
||||
set { SetValue(EventArgsConverterProperty, value); }
|
||||
}
|
||||
|
||||
public object EventArgsConverterParameter
|
||||
{
|
||||
get { return GetValue(EventArgsConverterParameterProperty); }
|
||||
set { SetValue(EventArgsConverterParameterProperty, value); }
|
||||
}
|
||||
|
||||
protected override void OnAttachedTo(View visualElement)
|
||||
{
|
||||
base.OnAttachedTo(visualElement);
|
||||
|
||||
var events = AssociatedObject.GetType().GetRuntimeEvents().ToArray();
|
||||
if (events.Any())
|
||||
{
|
||||
_eventInfo = events.FirstOrDefault(e => e.Name == EventName);
|
||||
if (_eventInfo == null)
|
||||
throw new ArgumentException(String.Format("EventToCommand: Can't find any event named '{0}' on attached type", EventName));
|
||||
|
||||
AddEventHandler(_eventInfo, AssociatedObject, OnFired);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDetachingFrom(View view)
|
||||
{
|
||||
if (_handler != null)
|
||||
_eventInfo.RemoveEventHandler(AssociatedObject, _handler);
|
||||
|
||||
base.OnDetachingFrom(view);
|
||||
}
|
||||
|
||||
private void AddEventHandler(EventInfo eventInfo, object item, Action<object, EventArgs> action)
|
||||
{
|
||||
var eventParameters = eventInfo.EventHandlerType
|
||||
.GetRuntimeMethods().First(m => m.Name == "Invoke")
|
||||
.GetParameters()
|
||||
.Select(p => Expression.Parameter(p.ParameterType))
|
||||
.ToArray();
|
||||
|
||||
var actionInvoke = action.GetType()
|
||||
.GetRuntimeMethods().First(m => m.Name == "Invoke");
|
||||
|
||||
_handler = Expression.Lambda(
|
||||
eventInfo.EventHandlerType,
|
||||
Expression.Call(Expression.Constant(action), actionInvoke, eventParameters[0], eventParameters[1]),
|
||||
eventParameters
|
||||
)
|
||||
.Compile();
|
||||
|
||||
eventInfo.AddEventHandler(item, _handler);
|
||||
}
|
||||
|
||||
private void OnFired(object sender, EventArgs eventArgs)
|
||||
{
|
||||
if (Command == null)
|
||||
return;
|
||||
|
||||
var parameter = CommandParameter;
|
||||
|
||||
if (eventArgs != null && eventArgs != EventArgs.Empty)
|
||||
{
|
||||
parameter = eventArgs;
|
||||
|
||||
if (EventArgsConverter != null)
|
||||
{
|
||||
parameter = EventArgsConverter.Convert(eventArgs, typeof(object), EventArgsConverterParameter, CultureInfo.CurrentUICulture);
|
||||
}
|
||||
}
|
||||
|
||||
if (Command.CanExecute(parameter))
|
||||
{
|
||||
Command.Execute(parameter);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Converters
|
||||
{
|
||||
public class ItemTappedEventArgsConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
var eventArgs = value as ItemTappedEventArgs;
|
||||
if (eventArgs == null)
|
||||
throw new ArgumentException("Expected TappedEventArgs as value", "value");
|
||||
|
||||
return eventArgs.Item;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
|
||||
namespace eShopOnContainers.Core.Models.Catalog
|
||||
{
|
||||
public class CatalogItem
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public decimal Price { get; set; }
|
||||
public string Image { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,12 +1,21 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace eShopOnContainers.Core.Models.Orders
|
||||
{
|
||||
public class Order
|
||||
{
|
||||
public long OrderNumber { get; set; }
|
||||
public int SequenceNumber { get; set; }
|
||||
public double Total { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public DateTime OrderDate { get; set; }
|
||||
public OrderStatus Status { get; set; }
|
||||
public User.User ShippingAddress { get; set; }
|
||||
public int BuyerId { get; set; }
|
||||
public List<OrderItem> OrderItems { get; set; }
|
||||
|
||||
public string OrderNumber
|
||||
{
|
||||
get { return string.Format("{0}/{1}-{2}", OrderDate.Year, OrderDate.Month, SequenceNumber); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
|
||||
namespace eShopOnContainers.Core.Models.Orders
|
||||
{
|
||||
public class OrderItem
|
||||
{
|
||||
public int ProductId { get; set; }
|
||||
public Guid OrderId { get; set; }
|
||||
public string ProductName { get; set; }
|
||||
public decimal UnitPrice { get; set; }
|
||||
public int Quantity { get; set; }
|
||||
public decimal Discount { get; set; }
|
||||
public decimal Total { get { return Quantity * UnitPrice; } }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace eShopOnContainers.Core.Models.Products
|
||||
{
|
||||
public class Product
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Image { get; set; }
|
||||
public double Price { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
namespace eShopOnContainers.Core.Models.User
|
||||
{
|
||||
public class User
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string LastName { get; set; }
|
||||
public string CardNumber { get; set; }
|
||||
public string SecurityNumber { get; set; }
|
||||
public string Expiration { get; set; }
|
||||
public string CardHolderName { get; set; }
|
||||
public int CardType { get; set; }
|
||||
public string Street { get; set; }
|
||||
public string City { get; set; }
|
||||
public string State { get; set; }
|
||||
public string StateCode { get; set; }
|
||||
public string Country { get; set; }
|
||||
public string CountryCode { get; set; }
|
||||
public string ZipCode { get; set; }
|
||||
public double Latitude { get; set; }
|
||||
public double Longitude { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
using eShopOnContainers.Core.Models.Catalog;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.Catalog
|
||||
{
|
||||
public class CatalogMockService : ICatalogService
|
||||
{
|
||||
public async Task<ObservableCollection<CatalogItem>> GetProductsAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return new ObservableCollection<CatalogItem>
|
||||
{
|
||||
new CatalogItem { Id = 1, Image = Device.OS != TargetPlatform.Windows ? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M },
|
||||
new CatalogItem { Id = 2, Image = Device.OS != TargetPlatform.Windows ? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M },
|
||||
new CatalogItem { Id = 3, Image = Device.OS != TargetPlatform.Windows ? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M }
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
using eShopOnContainers.Core.Models.Catalog;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.Catalog
|
||||
{
|
||||
public interface ICatalogService
|
||||
{
|
||||
Task<ObservableCollection<CatalogItem>> GetProductsAsync();
|
||||
}
|
||||
}
|
|
@ -152,7 +152,6 @@ namespace eShopOnContainers.Services
|
|||
_mappings.Add(typeof(LoginViewModel), typeof(LoginView));
|
||||
_mappings.Add(typeof(MainViewModel), typeof(MainView));
|
||||
_mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView));
|
||||
_mappings.Add(typeof(OrdersViewModel), typeof(OrdersView));
|
||||
_mappings.Add(typeof(ProfileViewModel), typeof(ProfileView));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
using eShopOnContainers.Core.Models.Orders;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.Orders
|
||||
{
|
||||
public class FakeOrdersService : IOrdersService
|
||||
{
|
||||
public async Task<ObservableCollection<Order>> GetOrdersAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return new ObservableCollection<Order>
|
||||
{
|
||||
new Order { OrderNumber = 0123456789, Total = 45.30, Date = DateTime.Now, Status = OrderStatus.Delivered },
|
||||
new Order { OrderNumber = 9123456780, Total = 39.95, Date = DateTime.Now, Status = OrderStatus.Delivered },
|
||||
new Order { OrderNumber = 8765432190, Total = 15.00, Date = DateTime.Now, Status = OrderStatus.Delivered },
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<Order> GetCartAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return new Order { OrderNumber = 0123456789, Total = 45.99, Date = DateTime.Now, Status = OrderStatus.Pending };
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,4 +10,4 @@ namespace eShopOnContainers.Core.Services.Orders
|
|||
|
||||
Task<Order> GetCartAsync();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
using eShopOnContainers.Core.Models.Orders;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.Orders
|
||||
{
|
||||
public class OrdersMockService : IOrdersService
|
||||
{
|
||||
public async Task<ObservableCollection<Order>> GetOrdersAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return new ObservableCollection<Order>
|
||||
{
|
||||
new Order { SequenceNumber = 123, Total = 56.40, 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 = 231, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() },
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<Order> GetCartAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return new Order { SequenceNumber = 0123456789, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Pending, OrderItems = GetOrderItems() };
|
||||
}
|
||||
|
||||
private List<OrderItem> GetOrderItems()
|
||||
{
|
||||
return new List<OrderItem>
|
||||
{
|
||||
new OrderItem { OrderId = Guid.NewGuid(), ProductId = 1, Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M },
|
||||
new OrderItem { OrderId = Guid.NewGuid(), ProductId = 3, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M }
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
using eShopOnContainers.Core.Models.Products;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.Products
|
||||
{
|
||||
public class FakeProductsService : IProductsService
|
||||
{
|
||||
public async Task<ObservableCollection<Product>> GetProductsAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return new ObservableCollection<Product>
|
||||
{
|
||||
new Product { Image = Device.OS != TargetPlatform.Windows ? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50 },
|
||||
new Product { Image = Device.OS != TargetPlatform.Windows ? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50 },
|
||||
new Product { Image = Device.OS != TargetPlatform.Windows ? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95 }
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
using eShopOnContainers.Core.Models.Products;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.Products
|
||||
{
|
||||
public interface IProductsService
|
||||
{
|
||||
Task<ObservableCollection<Product>> GetProductsAsync();
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
using Microsoft.Practices.Unity;
|
||||
using eShopOnContainers.Core.Services.Orders;
|
||||
using eShopOnContainers.Core.Services.Products;
|
||||
using eShopOnContainers.Core.ViewModels;
|
||||
using eShopOnContainers.Services;
|
||||
using System;
|
||||
using eShopOnContainers.Core.Services.Catalog;
|
||||
|
||||
namespace eShopOnContainers.ViewModels.Base
|
||||
{
|
||||
|
@ -28,8 +28,8 @@ namespace eShopOnContainers.ViewModels.Base
|
|||
// services
|
||||
_unityContainer.RegisterType<IDialogService, DialogService>();
|
||||
RegisterSingleton<INavigationService, NavigationService>();
|
||||
_unityContainer.RegisterType<IProductsService, FakeProductsService>();
|
||||
_unityContainer.RegisterType<IOrdersService, FakeOrdersService>();
|
||||
_unityContainer.RegisterType<ICatalogService, CatalogMockService>();
|
||||
_unityContainer.RegisterType<IOrdersService, OrdersMockService>();
|
||||
|
||||
// view models
|
||||
_unityContainer.RegisterType<CartViewModel>();
|
||||
|
@ -37,7 +37,6 @@ namespace eShopOnContainers.ViewModels.Base
|
|||
_unityContainer.RegisterType<LoginViewModel>();
|
||||
_unityContainer.RegisterType<MainViewModel>();
|
||||
_unityContainer.RegisterType<OrderDetailViewModel>();
|
||||
_unityContainer.RegisterType<OrdersViewModel>();
|
||||
_unityContainer.RegisterType<ProfileViewModel>();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,31 @@
|
|||
using eShopOnContainers.ViewModels.Base;
|
||||
using System.Threading.Tasks;
|
||||
using eShopOnContainers.Core.Models.Orders;
|
||||
using eShopOnContainers.ViewModels.Base;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
public class OrderDetailViewModel : ViewModelBase
|
||||
{
|
||||
private Order _order;
|
||||
|
||||
public Order Order
|
||||
{
|
||||
get { return _order; }
|
||||
set
|
||||
{
|
||||
_order = value;
|
||||
RaisePropertyChanged(() => Order);
|
||||
}
|
||||
}
|
||||
|
||||
public override Task InitializeAsync(object navigationData)
|
||||
{
|
||||
if(navigationData is Order)
|
||||
{
|
||||
Order = navigationData as Order;
|
||||
}
|
||||
|
||||
return base.InitializeAsync(navigationData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
using eShopOnContainers.ViewModels.Base;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
public class OrdersViewModel : ViewModelBase
|
||||
{
|
||||
}
|
||||
}
|
|
@ -31,6 +31,8 @@ namespace eShopOnContainers.Core.ViewModels
|
|||
|
||||
public ICommand LogoutCommand => new Command(LogoutAsync);
|
||||
|
||||
public ICommand OrderDetailCommand => new Command<Order>(OrderDetail);
|
||||
|
||||
public override async Task InitializeAsync(object navigationData)
|
||||
{
|
||||
Orders = await _ordersService.GetOrdersAsync();
|
||||
|
@ -41,5 +43,10 @@ namespace eShopOnContainers.Core.ViewModels
|
|||
await NavigationService.NavigateToAsync<LoginViewModel>();
|
||||
await NavigationService.RemoveBackStackAsync();
|
||||
}
|
||||
|
||||
private void OrderDetail(Order order)
|
||||
{
|
||||
NavigationService.NavigateToAsync<OrderDetailViewModel>(order);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,26 +1,26 @@
|
|||
using System.Threading.Tasks;
|
||||
using eShopOnContainers.ViewModels.Base;
|
||||
using eShopOnContainers.Core.Services.Products;
|
||||
using System.Collections.ObjectModel;
|
||||
using eShopOnContainers.Core.Models.Products;
|
||||
using Xamarin.Forms;
|
||||
using eShopOnContainers.Core.ViewModels.Base;
|
||||
using eShopOnContainers.Core.Models.Catalog;
|
||||
using eShopOnContainers.Core.Services.Catalog;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
public class ProductsViewModel : ViewModelBase
|
||||
{
|
||||
private ObservableCollection<Product> _products;
|
||||
private Product _product;
|
||||
private ObservableCollection<CatalogItem> _products;
|
||||
private CatalogItem _product;
|
||||
|
||||
private IProductsService _productsService;
|
||||
private ICatalogService _productsService;
|
||||
|
||||
public ProductsViewModel(IProductsService productsService)
|
||||
public ProductsViewModel(ICatalogService productsService)
|
||||
{
|
||||
_productsService = productsService;
|
||||
}
|
||||
|
||||
public ObservableCollection<Product> Products
|
||||
public ObservableCollection<CatalogItem> Products
|
||||
{
|
||||
get { return _products; }
|
||||
set
|
||||
|
@ -30,7 +30,7 @@ namespace eShopOnContainers.Core.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
public Product Product
|
||||
public CatalogItem Product
|
||||
{
|
||||
get { return _product; }
|
||||
set
|
||||
|
|
|
@ -9,4 +9,4 @@ namespace eShopOnContainers.Core.Views
|
|||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,8 +29,7 @@
|
|||
</views:ProfileView>
|
||||
<views:CartView
|
||||
x:Name="CartView"
|
||||
controls:CustomTabbedPage.BadgeText="{Binding BadgeCount}"
|
||||
controls:CustomTabbedPage.BadgeColor="{StaticResource LightGreenColor}">
|
||||
controls:CustomTabbedPage.BadgeText="{Binding BadgeCount}">
|
||||
<views:HomeView.Icon>
|
||||
<OnPlatform
|
||||
x:TypeArguments="FileImageSource"
|
||||
|
|
|
@ -1,6 +1,233 @@
|
|||
<?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.OrderDetailView">
|
||||
|
||||
x:Class="eShopOnContainers.Core.Views.OrderDetailView"
|
||||
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
||||
xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core"
|
||||
xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
|
||||
Title="{Binding Order.SequenceNumber}">
|
||||
<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>
|
||||
|
||||
<animations:StoryBoard
|
||||
x:Key="OrderInfoAnimation"
|
||||
Target="{x:Reference OrderInfo}">
|
||||
<animations:FadeToAnimation
|
||||
Opacity="1"
|
||||
Duration="500"
|
||||
Delay="100"/>
|
||||
</animations:StoryBoard>
|
||||
|
||||
<animations:StoryBoard
|
||||
x:Key="ShippingAddressAnimation"
|
||||
Target="{x:Reference ShippingAddress}">
|
||||
<animations:FadeToAnimation
|
||||
Opacity="1"
|
||||
Duration="1000"
|
||||
Delay="200"/>
|
||||
</animations:StoryBoard>
|
||||
|
||||
<animations:StoryBoard
|
||||
x:Key="OrderItemsAnimation"
|
||||
Target="{x:Reference OrderItems}">
|
||||
<animations:FadeToAnimation
|
||||
Opacity="1"
|
||||
Duration="1500"
|
||||
Delay="300"/>
|
||||
</animations:StoryBoard>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
<ContentPage.Triggers>
|
||||
<EventTrigger
|
||||
Event="Appearing">
|
||||
<triggers:BeginAnimation
|
||||
Animation="{StaticResource OrderInfoAnimation}" />
|
||||
<triggers:BeginAnimation
|
||||
Animation="{StaticResource ShippingAddressAnimation}" />
|
||||
<triggers:BeginAnimation
|
||||
Animation="{StaticResource OrderItemsAnimation}" />
|
||||
</EventTrigger>
|
||||
</ContentPage.Triggers>
|
||||
<ScrollView>
|
||||
<Grid
|
||||
BackgroundColor="{StaticResource BackgroundColor}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<!-- ORDER INFO -->
|
||||
<Grid
|
||||
x:Name="OrderInfo"
|
||||
Opacity="0">
|
||||
<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"
|
||||
Opacity="0">
|
||||
<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="120 E 87th Street"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="Seattle, WA"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="98122"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="United States"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
<!-- ORDER ITEMS -->
|
||||
<Grid
|
||||
x:Name="OrderItems"
|
||||
Grid.Row="2"
|
||||
Opacity="0">
|
||||
<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>
|
||||
</ContentPage>
|
|
@ -1,6 +0,0 @@
|
|||
<?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.OrdersView">
|
||||
|
||||
</ContentPage>
|
|
@ -1,12 +0,0 @@
|
|||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Views
|
||||
{
|
||||
public partial class OrdersView : ContentPage
|
||||
{
|
||||
public OrdersView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
x:Class="eShopOnContainers.Core.Views.ProfileView"
|
||||
xmlns:views="clr-namespace:eShopOnContainers.Core.Views;assembly=eShopOnContainers.Core"
|
||||
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
||||
xmlns:behaviors="clr-namespace:eShopOnContainers.Core.Behaviors;assembly=eShopOnContainers.Core"
|
||||
Title="My profile">
|
||||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
|
@ -83,6 +84,12 @@
|
|||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
CachingStrategy="RecycleElement">
|
||||
<ListView.Behaviors>
|
||||
<behaviors:EventToCommandBehavior
|
||||
EventName="ItemTapped"
|
||||
Command="{Binding OrderDetailCommand}"
|
||||
EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" />
|
||||
</ListView.Behaviors>
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<ViewCell>
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
<?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.OrderItemTemplate">
|
||||
<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>
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentView.Resources>
|
||||
<ContentView.Content>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="1" />
|
||||
</Grid.RowDefinitions>
|
||||
<Image
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Source="{Binding Image}"/>
|
||||
<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}"/>
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
Text="{Binding Quantity}"
|
||||
Style="{StaticResource OrderItemQuantityStyle}"/>
|
||||
</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 OrderItemTemplate : ContentView
|
||||
{
|
||||
public OrderItemTemplate()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,10 +22,10 @@
|
|||
<Setter Property="TextColor"
|
||||
Value="Black" />
|
||||
</Style>
|
||||
|
||||
|
||||
</ResourceDictionary>
|
||||
</ContentView.Resources>
|
||||
<ContentView.Content>
|
||||
<ContentView.Content>
|
||||
<Grid
|
||||
BackgroundColor="{StaticResource BackgroundColor}">
|
||||
<Grid.ColumnDefinitions>
|
||||
|
@ -67,7 +67,7 @@
|
|||
Text="DATE"
|
||||
Style="{StaticResource OrderTitleStyle}"/>
|
||||
<Label
|
||||
Text="{Binding Date, Converter={StaticResource DatetimeConverter}}"
|
||||
Text="{Binding OrderDate, Converter={StaticResource DatetimeConverter}}"
|
||||
Style="{StaticResource OrderContentStyle}"/>
|
||||
</StackLayout>
|
||||
<StackLayout
|
||||
|
@ -87,5 +87,5 @@
|
|||
Grid.Row="2"
|
||||
BackgroundColor="Gray"/>
|
||||
</Grid>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
|
@ -9,4 +9,4 @@ namespace eShopOnContainers.Core.Views.Templates
|
|||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,4 +9,4 @@ namespace eShopOnContainers.Core.Views.Templates
|
|||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -42,25 +42,30 @@
|
|||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Behaviors\Base\BindableBehavior.cs" />
|
||||
<Compile Include="Behaviors\EventToCommandBehavior.cs" />
|
||||
<Compile Include="Controls\BindablePicker.cs" />
|
||||
<Compile Include="Controls\CustomTabbedPage.cs" />
|
||||
<Compile Include="Converters\DatetimeConverter.cs" />
|
||||
<Compile Include="Converters\ItemTappedConverter.cs" />
|
||||
<Compile Include="Converters\ToUpperConverter.cs" />
|
||||
<Compile Include="Effects\LineColorEffect.cs" />
|
||||
<Compile Include="Extensions\AnimationExtension.cs" />
|
||||
<Compile Include="Helpers\EasingHelper.cs" />
|
||||
<Compile Include="Models\Orders\Order.cs" />
|
||||
<Compile Include="Models\Orders\OrderItem.cs" />
|
||||
<Compile Include="Models\Orders\OrderStatus.cs" />
|
||||
<Compile Include="Models\Products\Product.cs" />
|
||||
<Compile Include="Models\Catalog\CatalogItem.cs" />
|
||||
<Compile Include="Models\User\User.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Services\Dialog\DialogService.cs" />
|
||||
<Compile Include="Services\Dialog\IDialogService.cs" />
|
||||
<Compile Include="Services\Navigation\INavigationService.cs" />
|
||||
<Compile Include="Services\Navigation\NavigationService.cs" />
|
||||
<Compile Include="Services\Orders\FakeOrdersService.cs" />
|
||||
<Compile Include="Services\Orders\OrdersMockService.cs" />
|
||||
<Compile Include="Services\Orders\IOrdersService.cs" />
|
||||
<Compile Include="Services\Products\FakeProductsService.cs" />
|
||||
<Compile Include="Services\Products\IProductsService.cs" />
|
||||
<Compile Include="Services\Catalog\CatalogMockService.cs" />
|
||||
<Compile Include="Services\Catalog\ICatalogService.cs" />
|
||||
<Compile Include="Triggers\BeginAnimation.cs" />
|
||||
<Compile Include="Validations\IsNotNullOrEmptyRule.cs" />
|
||||
<Compile Include="Validations\IValidationRule.cs" />
|
||||
|
@ -75,7 +80,6 @@
|
|||
<Compile Include="ViewModels\LoginViewModel.cs" />
|
||||
<Compile Include="ViewModels\MainViewModel.cs" />
|
||||
<Compile Include="ViewModels\OrderDetailViewModel.cs" />
|
||||
<Compile Include="ViewModels\OrdersViewModel.cs" />
|
||||
<Compile Include="ViewModels\ProfileViewModel.cs" />
|
||||
<Compile Include="Views\CartView.xaml.cs">
|
||||
<DependentUpon>CartView.xaml</DependentUpon>
|
||||
|
@ -98,12 +102,12 @@
|
|||
<Compile Include="Views\OrderDetailView.xaml.cs">
|
||||
<DependentUpon>OrderDetailView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\OrdersView.xaml.cs">
|
||||
<DependentUpon>OrdersView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\ProfileView.xaml.cs">
|
||||
<DependentUpon>ProfileView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\Templates\OrderItemTemplate.xaml.cs">
|
||||
<DependentUpon>OrderItemTemplate.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\Templates\OrderTemplate.xaml.cs">
|
||||
<DependentUpon>OrderTemplate.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -215,12 +219,6 @@
|
|||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Views\OrdersView.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Views\CustomNavigationPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
|
@ -245,6 +243,12 @@
|
|||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Views\Templates\OrderItemTemplate.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<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')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
|
|
|
@ -153,7 +153,7 @@
|
|||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Pages, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.Pages.2.3.0.38-pre2\lib\MonoAndroid10\Xamarin.Forms.Pages.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.Pages.2.3.2.118-pre1\lib\MonoAndroid10\Xamarin.Forms.Pages.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
|
@ -282,9 +282,9 @@
|
|||
<ErrorText>Este proyecto hace referencia a los paquetes NuGet que faltan en este equipo. Use la restauración de paquetes NuGet para descargarlos. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkID=322105. El archivo que falta es {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
</Target>
|
||||
<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\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.targets" Condition="Exists('..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.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')" />
|
||||
</Project>
|
|
@ -19,7 +19,7 @@
|
|||
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid70" />
|
||||
<package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid70" />
|
||||
<package id="Xamarin.Forms" version="2.3.2.127" targetFramework="monoandroid70" />
|
||||
<package id="Xamarin.Forms.Pages" version="2.3.0.38-pre2" targetFramework="monoandroid70" />
|
||||
<package id="Xamarin.Forms.Pages" version="2.3.2.118-pre1" targetFramework="monoandroid70" />
|
||||
<package id="Xamarin.Forms.Theme.Base" version="1.0.0.43-pre1" targetFramework="monoandroid70" />
|
||||
<package id="Xamarin.Forms.Theme.Light" version="1.0.0.43-pre1" targetFramework="monoandroid70" />
|
||||
</packages>
|
Двоичные данные
src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/fake_product_01.png
Normal file
Двоичные данные
src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/fake_product_01.png
Normal file
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 595 KiB |
|
@ -176,7 +176,7 @@
|
|||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Pages, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xamarin.Forms.Pages.2.3.0.38-pre2\lib\Xamarin.iOS10\Xamarin.Forms.Pages.dll</HintPath>
|
||||
<HintPath>..\..\packages\Xamarin.Forms.Pages.2.3.2.118-pre1\lib\Xamarin.iOS10\Xamarin.Forms.Pages.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
|
@ -221,13 +221,13 @@
|
|||
<BundleResource Include="Resources\fake_product_02.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.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')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>Este proyecto hace referencia a los paquetes NuGet que faltan en este equipo. Use la restauración de paquetes NuGet para descargarlos. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkID=322105. El archivo que falta es {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.targets" Condition="Exists('..\..\packages\StyleCop.MSBuild.5.0.0-alpha01\build\StyleCop.MSBuild.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')" />
|
||||
</Project>
|
|
@ -10,7 +10,7 @@
|
|||
<package id="StyleCop.MSBuild" version="5.0.0-alpha01" targetFramework="xamarinios10" developmentDependency="true" />
|
||||
<package id="Unity" version="4.0.1" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms" version="2.3.2.127" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms.Pages" version="2.3.0.38-pre2" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms.Pages" version="2.3.2.118-pre1" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms.Theme.Base" version="1.0.0.43-pre1" targetFramework="xamarinios10" />
|
||||
<package id="Xamarin.Forms.Theme.Light" version="1.0.0.43-pre1" targetFramework="xamarinios10" />
|
||||
</packages>
|
Загрузка…
Ссылка в новой задаче