diff --git a/CarouselViewChallenge/CarouselViewChallenge.Android/Assets/materialdesignicons-webfont.ttf b/CarouselViewChallenge/CarouselViewChallenge.Android/Assets/materialdesignicons-webfont.ttf new file mode 100644 index 0000000..aeba0d2 Binary files /dev/null and b/CarouselViewChallenge/CarouselViewChallenge.Android/Assets/materialdesignicons-webfont.ttf differ diff --git a/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj b/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj index 1e33499..5d99e0e 100644 --- a/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj +++ b/CarouselViewChallenge/CarouselViewChallenge.Android/CarouselViewChallenge.Android.csproj @@ -54,7 +54,7 @@ - + @@ -63,6 +63,7 @@ + @@ -101,4 +102,4 @@ - + \ No newline at end of file diff --git a/CarouselViewChallenge/CarouselViewChallenge/App.xaml b/CarouselViewChallenge/CarouselViewChallenge/App.xaml index f3469f1..f68c5b6 100644 --- a/CarouselViewChallenge/CarouselViewChallenge/App.xaml +++ b/CarouselViewChallenge/CarouselViewChallenge/App.xaml @@ -1,10 +1,16 @@  - + + + + + + \ 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..cc9cca0 --- /dev/null +++ b/CarouselViewChallenge/CarouselViewChallenge/ViewModels/CarouselViewChallengeViewModel.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Text; + +namespace CarouselViewChallenge.ViewModels +{ + public class SliderPage + { + public string Icon { get; set; } + public string Header { get; set; } + public string Text { get; set; } + public string BackgroundColor { get; set; } + }; + + public class CarouselViewChallengeViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + private ObservableCollection _sliders; + public ObservableCollection Sliders + { + get => _sliders; + set + { + if (_sliders != value) + { + _sliders = value; + OnPropertyChanged(new PropertyChangedEventArgs("Sliders")); + } + } + } + + private int _index; + public int Index + { + get => _index; + set + { + if (_index != value) + { + _index = value; + OnPropertyChanged(new PropertyChangedEventArgs("Index")); + + TextLabel = (_index + 1 == Sliders.Count) ? "DONE" : "NEXT"; + OnPropertyChanged(new PropertyChangedEventArgs("TextLabel")); + } + } + } + + public string TextLabel { get; set; } + + public CarouselViewChallengeViewModel() + { + Sliders = new ObservableCollection(); + TextLabel = "NEXT"; + } + + 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..baa22ef 100644 --- a/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml +++ b/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml @@ -1,13 +1,107 @@  - + - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml.cs b/CarouselViewChallenge/CarouselViewChallenge/Views/CarouselViewChallengePage.xaml.cs index 38f2e9f..161f7f4 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,56 @@ namespace CarouselViewChallenge.Views [XamlCompilation(XamlCompilationOptions.Compile)] public partial class CarouselViewChallengePage : ContentPage { + public CarouselViewChallengeViewModel viewModel { get; set; } + public CarouselViewChallengePage() { InitializeComponent(); + viewModel = new CarouselViewChallengeViewModel(); + viewModel.Sliders.Add(new SliderPage() + { + Icon = "\uF684", //"\uF25A", + Header = "Hello Food!", + Text = "The easiest way to order food from your favourite restaurant!", + BackgroundColor = "#F64C73" + }); + viewModel.Sliders.Add(new SliderPage() + { + Icon = "\uF516", + Header = "Movie Tickets", + Text = "Book movie tickets for your family and friends!", + BackgroundColor = "#20D2BB" + }); + viewModel.Sliders.Add(new SliderPage() + { + Icon = "\uFCCE", + Header = "Great Discounts", + Text = "Best discounts on every single service we offer!", + BackgroundColor = "#3395FF" + }); + viewModel.Sliders.Add(new SliderPage() + { + Icon = "\uF01D", + Header = "World Travel", + Text = "Book tickets of any transportation and travel the world!", + BackgroundColor = "#C873F4" + }); + BindingContext = viewModel; + } + + private void Carousel_PositionChanged(object sender, PositionChangedEventArgs e) + { + viewModel.Index = e.CurrentPosition; + + bv0.BackgroundColor = viewModel.Index == 0 ? Color.FromHex("#FFFFFFFF") : Color.FromHex("#7CFFFFFF"); + bv1.BackgroundColor = viewModel.Index == 1 ? Color.FromHex("#FFFFFFFF") : Color.FromHex("#7CFFFFFF"); + bv2.BackgroundColor = viewModel.Index == 2 ? Color.FromHex("#FFFFFFFF") : Color.FromHex("#7CFFFFFF"); + bv3.BackgroundColor = viewModel.Index == 3 ? Color.FromHex("#FFFFFFFF") : Color.FromHex("#7CFFFFFF"); + } + private void Next_Tapped(object sender, EventArgs e) + { + if (carousel.Position + 1 < viewModel.Sliders.Count) + carousel.Position += 1; } } } \ No newline at end of file