diff --git a/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj b/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj
index 1e33499..df094f6 100644
--- a/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj
+++ b/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj
@@ -32,6 +32,10 @@
prompt
4
None
+ false
+ false
+ false
+ false
true
@@ -54,8 +58,11 @@
-
+
+
+ 4.2.0.815419
+
@@ -101,4 +108,4 @@
-
+
\ No newline at end of file
diff --git a/CarouselViewChallenge/CarouselViewChallenge.Android/MainActivity.cs b/CarouselViewChallenge/CarouselViewChallenge.Android/MainActivity.cs
index fd4e22a..538f47b 100644
--- a/CarouselViewChallenge/CarouselViewChallenge.Android/MainActivity.cs
+++ b/CarouselViewChallenge/CarouselViewChallenge.Android/MainActivity.cs
@@ -22,6 +22,7 @@ protected override void OnCreate(Bundle savedInstanceState)
global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
+ global::Xamarin.Forms.FormsMaterial.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
diff --git a/CarouselViewChallenge/CarouselViewChallenge.UWP/CarouselViewChallenge.UWP.csproj b/CarouselViewChallenge/CarouselViewChallenge.UWP/CarouselViewChallenge.UWP.csproj
index 4b6b2c9..ff76e2e 100644
--- a/CarouselViewChallenge/CarouselViewChallenge.UWP/CarouselViewChallenge.UWP.csproj
+++ b/CarouselViewChallenge/CarouselViewChallenge.UWP/CarouselViewChallenge.UWP.csproj
@@ -148,6 +148,9 @@
+
+ 4.2.0.815419
+
@@ -159,4 +162,4 @@
14.0
-
+
\ No newline at end of file
diff --git a/CarouselViewChallenge/CarouselViewChallenge.iOS/AppDelegate.cs b/CarouselViewChallenge/CarouselViewChallenge.iOS/AppDelegate.cs
index 949500f..6804b51 100644
--- a/CarouselViewChallenge/CarouselViewChallenge.iOS/AppDelegate.cs
+++ b/CarouselViewChallenge/CarouselViewChallenge.iOS/AppDelegate.cs
@@ -23,7 +23,9 @@ public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsAppli
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
+
global::Xamarin.Forms.Forms.Init();
+ global::Xamarin.Forms.FormsMaterial.Init();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
diff --git a/CarouselViewChallenge/CarouselViewChallenge.iOS/CarouselViewChallenge.iOS.csproj b/CarouselViewChallenge/CarouselViewChallenge.iOS/CarouselViewChallenge.iOS.csproj
index 6241d2c..05e31c6 100644
--- a/CarouselViewChallenge/CarouselViewChallenge.iOS/CarouselViewChallenge.iOS.csproj
+++ b/CarouselViewChallenge/CarouselViewChallenge.iOS/CarouselViewChallenge.iOS.csproj
@@ -131,6 +131,12 @@
+
+ 4.2.0.815419
+
+
+ 72.2.0.1
+
@@ -139,4 +145,4 @@
CarouselViewChallenge
-
+
\ No newline at end of file
diff --git a/CarouselViewChallenge/CarouselViewChallenge/App.xaml.cs b/CarouselViewChallenge/CarouselViewChallenge/App.xaml.cs
index a2fadf8..05e4ec0 100644
--- a/CarouselViewChallenge/CarouselViewChallenge/App.xaml.cs
+++ b/CarouselViewChallenge/CarouselViewChallenge/App.xaml.cs
@@ -2,6 +2,7 @@
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using CarouselViewChallenge.Views;
+using MPD.Services;
namespace CarouselViewChallenge
{
@@ -12,6 +13,8 @@ public App()
{
InitializeComponent();
+ DependencyService.Register();
+
MainPage = new AppShell();
}
diff --git a/CarouselViewChallenge/CarouselViewChallenge/CarouselViewChallenge.csproj b/CarouselViewChallenge/CarouselViewChallenge/CarouselViewChallenge.csproj
index a58ec88..326e8ab 100644
--- a/CarouselViewChallenge/CarouselViewChallenge/CarouselViewChallenge.csproj
+++ b/CarouselViewChallenge/CarouselViewChallenge/CarouselViewChallenge.csproj
@@ -7,11 +7,8 @@
-
-
-
-
-
+
+
diff --git a/CarouselViewChallenge/CarouselViewChallenge/Models/Item.cs b/CarouselViewChallenge/CarouselViewChallenge/Models/Item.cs
new file mode 100644
index 0000000..aca112d
--- /dev/null
+++ b/CarouselViewChallenge/CarouselViewChallenge/Models/Item.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xamarin.Forms;
+
+namespace CarouselViewChallenge.Models
+{
+ public class Item
+ {
+ public string Id { get; set; }
+ public string Text { get; set; }
+ public string Description { get; set; }
+
+ public string Emoji { get; set; }
+ }
+}
diff --git a/CarouselViewChallenge/CarouselViewChallenge/Services/IDataStore.cs b/CarouselViewChallenge/CarouselViewChallenge/Services/IDataStore.cs
new file mode 100644
index 0000000..4eba7b9
--- /dev/null
+++ b/CarouselViewChallenge/CarouselViewChallenge/Services/IDataStore.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace MPD.Services
+{
+ public interface IDataStore
+ {
+ Task AddItemAsync(T item);
+ Task UpdateItemAsync(T item);
+ Task DeleteItemAsync(string id);
+ Task GetItemAsync(string id);
+ Task> GetItemsAsync(bool forceRefresh = false);
+ }
+}
diff --git a/CarouselViewChallenge/CarouselViewChallenge/Services/MockDataStore.cs b/CarouselViewChallenge/CarouselViewChallenge/Services/MockDataStore.cs
new file mode 100644
index 0000000..c51dc23
--- /dev/null
+++ b/CarouselViewChallenge/CarouselViewChallenge/Services/MockDataStore.cs
@@ -0,0 +1,70 @@
+using CarouselViewChallenge.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Xamarin.Forms;
+
+namespace MPD.Services
+{
+ public class MockDataStore : IDataStore-
+ {
+ List
- items;
+
+ public MockDataStore()
+ {
+ items = new List
- ();
+ //new Image { Source = ImageSource.FromResource("CarouselViewChallenge.veg1.jpg", typeof(EmbeddedImages).GetTypeInfo().Assembly)
+ var mockItems = new List
-
+ {
+ new Item { Id = Guid.NewGuid().ToString(), Text = "First item", Description="This is an item description.",Emoji="😀" } ,
+ new Item { Id = Guid.NewGuid().ToString(), Text = "Second item", Description="This is an item description.",Emoji="👱" },
+ new Item { Id = Guid.NewGuid().ToString(), Text = "Third item", Description="This is an item description.",Emoji="🤓" },
+ new Item { Id = Guid.NewGuid().ToString(), Text = "Fourth item", Description="This is an item description.",Emoji="👨" },
+ new Item { Id = Guid.NewGuid().ToString(), Text = "Fifth item", Description="This is an item description.",Emoji="👨⚕️" },
+ new Item { Id = Guid.NewGuid().ToString(), Text = "Sixth item", Description="This is an item description.",Emoji="👌" }
+
+
+ };
+
+ foreach (var item in mockItems)
+ {
+ items.Add(item);
+ }
+ }
+
+ public async Task AddItemAsync(Item item)
+ {
+ items.Add(item);
+
+ return await Task.FromResult(true);
+ }
+
+ public async Task UpdateItemAsync(Item item)
+ {
+ var oldItem = items.Where((Item arg) => arg.Id == item.Id).FirstOrDefault();
+ items.Remove(oldItem);
+ items.Add(item);
+
+ return await Task.FromResult(true);
+ }
+
+ public async Task DeleteItemAsync(string id)
+ {
+ var oldItem = items.Where((Item arg) => arg.Id == id).FirstOrDefault();
+ items.Remove(oldItem);
+
+ return await Task.FromResult(true);
+ }
+
+ public async Task
- GetItemAsync(string id)
+ {
+ return await Task.FromResult(items.FirstOrDefault(s => s.Id == id));
+ }
+
+ public async Task> GetItemsAsync(bool forceRefresh = false)
+ {
+ return await Task.FromResult(items);
+ }
+ }
+}
\ No newline at end of file
diff --git a/CarouselViewChallenge/CarouselViewChallenge/ViewModels/CarouselViewChallengeViewModel.cs b/CarouselViewChallenge/CarouselViewChallenge/ViewModels/CarouselViewChallengeViewModel.cs
new file mode 100644
index 0000000..b0bd543
--- /dev/null
+++ b/CarouselViewChallenge/CarouselViewChallenge/ViewModels/CarouselViewChallengeViewModel.cs
@@ -0,0 +1,63 @@
+using CarouselViewChallenge.Models;
+using MPD.Services;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Text;
+using System.Threading.Tasks;
+using Xamarin.Forms;
+
+namespace CarouselViewChallenge.ViewModels
+{
+ public class CarouselViewChallengeViewModel : INotifyPropertyChanged
+ {
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ private void OnPropertyChanged(PropertyChangedEventArgs eventArgs)
+ {
+ PropertyChanged?.Invoke(this, eventArgs);
+ }
+
+ public ObservableCollection
- Items { get; set; }
+
+ public Item currentItem { get; set; }
+
+ public IDataStore
- DataStore => DependencyService.Get>() ?? new MockDataStore();
+ public Command LoadItemsCommand { get; set; }
+ public CarouselViewChallengeViewModel()
+ {
+ Items = new ObservableCollection
- ();
+ LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
+ }
+
+ public async Task ExecuteLoadItemsCommand()
+ {
+ //if (IsBusy)
+ // return;
+
+ //IsBusy = true;
+ //return;
+ try
+ {
+ Items.Clear();
+ var items = await DataStore.GetItemsAsync(true);
+ foreach (var item in items)
+ {
+ Items.Add(item);
+ if (item.Text.Equals("Fourth item"))
+ currentItem = item;
+ }
+
+ }
+ catch (Exception ex)
+ {
+ //Debug.WriteLine(ex);
+ }
+ finally
+ {
+ //IsBusy = false;
+ }
+ }
+ }
+}
diff --git a/CarouselViewChallenge/CarouselViewChallenge/ViewModels/WelcomePageViewModel.cs b/CarouselViewChallenge/CarouselViewChallenge/ViewModels/WelcomePageViewModel.cs
index fdaa195..852a3b0 100644
--- a/CarouselViewChallenge/CarouselViewChallenge/ViewModels/WelcomePageViewModel.cs
+++ b/CarouselViewChallenge/CarouselViewChallenge/ViewModels/WelcomePageViewModel.cs
@@ -39,5 +39,7 @@ private void OnPropertyChanged(PropertyChangedEventArgs eventArgs)
{
PropertyChanged?.Invoke(this, eventArgs);
}
+
+
}
}
diff --git a/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml b/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml
index 1a7cc0d..f597b41 100644
--- a/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml
+++ b/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml
@@ -5,9 +5,83 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="CarouselViewChallenge.Views.CarouselViewChallengePage">
+
+
+ #000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml.cs b/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml.cs
index 38f2e9f..3a3052e 100644
--- a/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml.cs
+++ b/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml.cs
@@ -1,4 +1,5 @@
-using System;
+using CarouselViewChallenge.ViewModels;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -12,9 +13,29 @@ namespace CarouselViewChallenge.Views
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CarouselViewChallengePage : ContentPage
{
+ private CarouselViewChallengeViewModel viewModel;
+ private int tapCount = 0;
public CarouselViewChallengePage()
{
InitializeComponent();
+ viewModel = new CarouselViewChallengeViewModel();
+ this.Carousel.BindingContext = viewModel;
}
- }
+
+ protected async override void OnAppearing()
+ {
+ await viewModel.ExecuteLoadItemsCommand();
+ }
+
+ void OnTapGestureRecognizerTapped(object sender, EventArgs args)
+ {
+ tapCount++;
+ var labelSender = (Label)sender;
+
+ if (tapCount % 2 == 0)
+ {
+ labelSender.Opacity = 0.50;
+ }
+ }
+ }
}
\ No newline at end of file