From 9c9bc7824173731cb1b128065d0fc36f61dfacc9 Mon Sep 17 00:00:00 2001 From: Sweeky Satpathy Date: Tue, 23 Apr 2019 23:40:46 -0700 Subject: [PATCH 1/7] Working logic and view models, needs UI Cleanup --- .../CollectionViewChallenge.Android.csproj | 3 +- .../Properties/AndroidManifest.xml | 8 +- .../CollectionViewChallenge.iOS.csproj | 2 +- .../CollectionViewChallenge.csproj | 2 + .../Enum/PodcastCellType.cs | 10 + .../Models/GroupPodcast.cs | 16 ++ .../CollectionViewChallenge/Models/Podcast.cs | 15 ++ .../PodcastCellDataTemplateSelector.cs | 42 +++++ .../Templates/PodcastStandard.xaml | 25 +++ .../Templates/PodcastStandard.xaml.cs | 14 ++ .../ViewModels/PodcastCollectionViewModel.cs | 177 ++++++++++++++++++ .../Views/CollectionViewChallengePage.xaml | 56 +++--- .../Views/CollectionViewChallengePage.xaml.cs | 3 +- 13 files changed, 339 insertions(+), 34 deletions(-) create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Enum/PodcastCellType.cs create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Models/GroupPodcast.cs create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Models/Podcast.cs create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastCellDataTemplateSelector.cs create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml.cs create mode 100644 CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj index d2c42fc..9d13ef4 100644 --- a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj +++ b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj @@ -15,7 +15,6 @@ Properties\AndroidManifest.xml Resources Assets - false v8.1 true Xamarin.Android.Net.AndroidClientHandler @@ -102,7 +101,7 @@ - {BA39825E-3CF8-4A31-B120-782B2A651542} + {9A9DDEE5-8C48-4274-82D7-22EB79C97206} CollectionViewChallenge diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml b/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml index 8a8223a..0a62e2d 100644 --- a/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml +++ b/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@ - + - - - + + + \ No newline at end of file diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj b/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj index 49a7105..b66540e 100644 --- a/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj +++ b/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj @@ -139,7 +139,7 @@ - {BA39825E-3CF8-4A31-B120-782B2A651542} + {9A9DDEE5-8C48-4274-82D7-22EB79C97206} CollectionViewChallenge diff --git a/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj b/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj index 3ccfc60..983ebbf 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj +++ b/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj @@ -24,5 +24,7 @@ + + \ No newline at end of file diff --git a/CollectionViewChallenge/CollectionViewChallenge/Enum/PodcastCellType.cs b/CollectionViewChallenge/CollectionViewChallenge/Enum/PodcastCellType.cs new file mode 100644 index 0000000..be2c347 --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/Enum/PodcastCellType.cs @@ -0,0 +1,10 @@ +using System; +namespace CollectionViewChallenge.Enum +{ + public enum PodcastCellType + { + Standard, + New, + Personalized + } +} diff --git a/CollectionViewChallenge/CollectionViewChallenge/Models/GroupPodcast.cs b/CollectionViewChallenge/CollectionViewChallenge/Models/GroupPodcast.cs new file mode 100644 index 0000000..0ba63cd --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/Models/GroupPodcast.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +namespace CollectionViewChallenge.Models +{ + public class GroupPodcast : List + { + public string GroupName { get; set; } + + public GroupPodcast(string groupName, IList podcasts) + { + GroupName = groupName; + AddRange(podcasts); + } + } +} diff --git a/CollectionViewChallenge/CollectionViewChallenge/Models/Podcast.cs b/CollectionViewChallenge/CollectionViewChallenge/Models/Podcast.cs new file mode 100644 index 0000000..60e78d9 --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/Models/Podcast.cs @@ -0,0 +1,15 @@ +using System; +using CollectionViewChallenge.Enum; +using Xamarin.Forms; + +namespace CollectionViewChallenge.Models +{ + public class Podcast + { + public string Title { get; set; } + public string Image { get; set; } + public string Category { get; set; } + public string Author { get; set; } + public PodcastCellType CellType { get; set; } + } +} diff --git a/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastCellDataTemplateSelector.cs b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastCellDataTemplateSelector.cs new file mode 100644 index 0000000..7f58a7b --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastCellDataTemplateSelector.cs @@ -0,0 +1,42 @@ +using System; +using CollectionViewChallenge.Enum; +using CollectionViewChallenge.Models; +using Xamarin.Forms; + +namespace CollectionViewChallenge.Templates +{ + public class PodcastCellDataTemplateSelector : DataTemplateSelector + { + private readonly DataTemplate PodcastStandard; + + public PodcastCellDataTemplateSelector() + { + PodcastStandard = new DataTemplate(typeof(PodcastStandard)); + } + + protected override DataTemplate OnSelectTemplate(object item, BindableObject container) + { + if (item == null) + return null; + + if (!(item is Podcast)) + return null; + + var podcast = item as Podcast; + switch (podcast.CellType) + { + case PodcastCellType.New: + throw new NotImplementedException(); + + case PodcastCellType.Standard: + return PodcastStandard; + + case PodcastCellType.Personalized: + throw new NotImplementedException(); + + default: + return PodcastStandard; + } + } + } +} \ No newline at end of file diff --git a/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml new file mode 100644 index 0000000..0e78a33 --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml.cs b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml.cs new file mode 100644 index 0000000..3706266 --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using Xamarin.Forms; + +namespace CollectionViewChallenge.Templates +{ + public partial class PodcastStandard : ContentView + { + public PodcastStandard() + { + InitializeComponent(); + } + } +} diff --git a/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs new file mode 100644 index 0000000..10b1255 --- /dev/null +++ b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using CollectionViewChallenge.Enum; +using CollectionViewChallenge.Models; + +namespace CollectionViewChallenge.ViewModels +{ + public class PodcastCollectionViewModel + { + public IList PodcastList { get; private set; } + + public PodcastCollectionViewModel() + { + PodcastList = GetPodcasts(); + } + + private IList GetPodcasts() + { + var podcasts = new List(); + + podcasts.Add(new Podcast + { + Title = "The Joe Rogan Experience", + Image = "http://static.libsyn.com/p/assets/7/1/f/3/71f3014e14ef2722/JREiTunesImage2.jpg", + Author = "Joe Rogan", + Category = "Top", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "The Daily", + Image = "https://static01.nyt.com/images/2017/01/29/podcasts/the-daily-album-art/the-daily-album-art-square320-v4.png", + Author = "The New York Times", + Category = "Top", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "TED Radio Hour", + Image = "https://media.npr.org/assets/img/2018/08/03/npr_ted_podcasttile_sq-f924b1a84a189479b7555a19b030778d88ee55f5.jpg?s=1400", + Author = "NPR", + Category = "Top", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Stuff You Should Know", + Image = "https://image-ticketfly.imgix.net/00/02/57/10/25-og.jpg?w=500&h=500", + Author = "iHeartRadio", + Category = "Top", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "This American Life", + Image = "https://media.npr.org/images/podcasts/primary/icon_381444650-04c1bad8586e69edf04b78ea319846614c4a6a6b.png?s=1400", + Author = "This American Life", + Category = "Top", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Planet Money", + Image = "https://upload.wikimedia.org/wikipedia/en/thumb/c/c7/NPR_Planet_Money_cover_art.jpg/220px-NPR_Planet_Money_cover_art.jpg", + Author = "NPR", + Category = "Top", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "The Daily Show with Trevor Noah", + Image = "https://static.megaphone.fm/podcasts/34814bf8-e860-11e8-8bb2-6f3e1a98c859/image/uploads_2F1553887433220-tm6mswb02ve-81b991f0edef1e2d49524f20aaa20a8f_2FTDS_EARS_EDITION_COVER_ART_2019.jpg", + Author = "Comedy Central", + Category = "Trending", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Kwik Brain with Jim Kwik", + Image = "https://ssl-static.libsyn.com/p/assets/1/9/0/b/190b7fd25d03c103/KB_Podcast_cover_NEW.jpg", + Author = "Jim Kwik", + Category = "Trending", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Crime Junkie", + Image = "https://secureimg.stitcher.com/feedimageswide/480x270_160493.jpg", + Author = "audiochuck", + Category = "Trending", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Getting Curious with Jonathan Van Ness", + Image = "https://content.production.cdn.art19.com/images/2a/15/eb/b0/2a15ebb0-32de-4a48-8b0f-2739942cd331/23e99e4514262cbbf748fc123e0d6d9fe57af74d1e321ea4ea2e29262ed44629ad7e5f777ec365cd267b2803e83113d601f502673a83380d44289e89cee53fcf.jpeg", + Author = "Jonathan Van Ness", + Category = "Trending", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "The Watch", + Image = "https://content.production.cdn.art19.com/images/f9/9a/35/e4/f99a35e4-7b6c-4c4b-b019-f63cf5c1ee20/43139e8bc00a28c088991ec4a05829aaed812a09c8776a9210f2b5e91009f790b913a334a3e25b202f76cd77017fe5adb9e48662646ddeef3a6dc4b44680d70c.jpeg", + Author = "The Ringer", + Category = "Trending", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Sword and Scale", + Image = "https://content.production.cdn.art19.com/images/68/70/e9/6f/6870e96f-3454-4091-bf0b-4baa2facdc2f/06b0d6317351688822b96ba3ed21c39845d9f68f5b5b0b41e01231c30d9c2088e382df34a0657f3e07b7a463e712d43463e754efe28fbcc1e21db738c6f9d7d7.jpeg", + Author = "Incongruity True Crime", + Category = "Society and Culture", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Casefile True Crime", + Image = "http://static.libsyn.com/p/assets/8/5/0/1/85019a2d38df195e/casefile_logo_final.jpg", + Author = "Casefile True Crime", + Category = "Society and Culture", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Code Switch", + Image = "https://media.npr.org/assets/img/2018/08/03/npr_codeswitch_podcasttile_sq-a396f0624532c150ed5b77cefd9065f863f9daf2.jpg?s=1400", + Author = "NPR", + Category = "Society and Culture", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "On the Media", + Image = "https://thehustle.co/wp-content/uploads/2019/03/Onthemedia.jpg", + Author = "WNYC Studios", + Category = "Society and Culture", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Radiolab", + Image = "https://media.wnyc.org/i/raw/1/Radiolab_WNYCStudios_1400_2dq02Dh.png", + Author = "WNYC Studios", + Category = "Society and Culture", + CellType = PodcastCellType.Standard + }); + + var tempList = podcasts + .GroupBy(podcast => podcast.Category) + .Select(group => new GroupPodcast(group.Key, group.ToList())) + .ToList(); + + return tempList; + } + + + } +} diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml index f2da7f7..3856cdc 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml +++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml @@ -1,32 +1,36 @@ - - + + - - - - - - This is a CollectionView! - Your feedback on the experience of converting a ListView to a CollectionView is incredibly appreciated. - Here are three general questions: - 1. How was the experience of converting your existing ListView to a CollectionView? - 2. How is the performance compared to the ListView? - 3. Is there a specific piece of functionality that you'd like to see? - - - + + + - - - - - + + + \ No newline at end of file diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs index 701124f..0cf9794 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs +++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; - +using CollectionViewChallenge.ViewModels; using Xamarin.Forms; using Xamarin.Forms.Xaml; @@ -15,6 +15,7 @@ public partial class CollectionViewChallengePage : ContentPage public CollectionViewChallengePage() { InitializeComponent(); + BindingContext = new PodcastCollectionViewModel(); } } } \ No newline at end of file From 9ee6cacc79cddc91d22a9cf5b0f9918e0f6ef3da Mon Sep 17 00:00:00 2001 From: Sweeky Satpathy Date: Tue, 23 Apr 2019 23:59:34 -0700 Subject: [PATCH 2/7] UI fixes --- .../Templates/PodcastStandard.xaml | 15 +++--- .../ViewModels/PodcastCollectionViewModel.cs | 54 +++++++++++++++++++ .../Views/CollectionViewChallengePage.xaml | 7 ++- 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml index 0e78a33..ed34c4a 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml +++ b/CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastStandard.xaml @@ -5,20 +5,23 @@ x:Class="CollectionViewChallenge.Templates.PodcastStandard"> + + HeightRequest="125" + WidthRequest="100"> diff --git a/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs index 10b1255..178b1da 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs +++ b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/PodcastCollectionViewModel.cs @@ -164,6 +164,60 @@ private IList GetPodcasts() CellType = PodcastCellType.Standard }); + podcasts.Add(new Podcast + { + Title = "The Joe Rogan Experience", + Image = "http://static.libsyn.com/p/assets/7/1/f/3/71f3014e14ef2722/JREiTunesImage2.jpg", + Author = "Joe Rogan", + Category = "Comedy", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "The Daily", + Image = "https://static01.nyt.com/images/2017/01/29/podcasts/the-daily-album-art/the-daily-album-art-square320-v4.png", + Author = "The New York Times", + Category = "Comedy", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "TED Radio Hour", + Image = "https://media.npr.org/assets/img/2018/08/03/npr_ted_podcasttile_sq-f924b1a84a189479b7555a19b030778d88ee55f5.jpg?s=1400", + Author = "NPR", + Category = "Comedy", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Stuff You Should Know", + Image = "https://image-ticketfly.imgix.net/00/02/57/10/25-og.jpg?w=500&h=500", + Author = "iHeartRadio", + Category = "Comedy", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "This American Life", + Image = "https://media.npr.org/images/podcasts/primary/icon_381444650-04c1bad8586e69edf04b78ea319846614c4a6a6b.png?s=1400", + Author = "This American Life", + Category = "Comedy", + CellType = Enum.PodcastCellType.Standard + }); + + podcasts.Add(new Podcast + { + Title = "Planet Money", + Image = "https://upload.wikimedia.org/wikipedia/en/thumb/c/c7/NPR_Planet_Money_cover_art.jpg/220px-NPR_Planet_Money_cover_art.jpg", + Author = "NPR", + Category = "Comedy", + CellType = Enum.PodcastCellType.Standard + }); + var tempList = podcasts .GroupBy(podcast => podcast.Category) .Select(group => new GroupPodcast(group.Key, group.ToList())) diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml index 3856cdc..286283c 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml +++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml @@ -15,16 +15,15 @@ + Padding="20,20,0,0"> From 43c2e094d8f1a61483d30208d7e6a00e4e1f7a94 Mon Sep 17 00:00:00 2001 From: Sweeky Satpathy Date: Fri, 26 Apr 2019 03:05:24 -0700 Subject: [PATCH 3/7] Added Vertical Grid and UI Updates --- CollectionViewChallenge.sln | 21 ++++ .../CollectionViewChallenge/AppShell.xaml | 4 +- .../Models/GroupPodcast.cs | 16 --- .../PodcastCellDataTemplateSelector.cs | 4 +- .../Templates/PodcastNew.xaml | 51 +++++++++ .../Templates/PodcastNew.xaml.cs | 14 +++ .../Templates/PodcastStandard.xaml | 1 - .../ViewModels/PodcastCollectionViewModel.cs | 28 +++-- .../Views/CollectionViewChallengePage.xaml | 107 +++++++++++++++--- .../Views/CollectionViewChallengePage.xaml.cs | 2 + 10 files changed, 199 insertions(+), 49 deletions(-) delete mode 100644 CollectionViewChallenge/CollectionViewChallenge/Models/GroupPodcast.cs create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastNew.xaml create mode 100644 CollectionViewChallenge/CollectionViewChallenge/Templates/PodcastNew.xaml.cs diff --git a/CollectionViewChallenge.sln b/CollectionViewChallenge.sln index 1b8dd9b..43f16a8 100644 --- a/CollectionViewChallenge.sln +++ b/CollectionViewChallenge.sln @@ -80,4 +80,25 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {63071C55-3C4B-43FA-8EA1-DA7EA4CA408F} EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + Policies = $0 + $0.TextStylePolicy = $1 + $1.inheritsSet = null + $1.scope = text/x-csharp + $0.CSharpFormattingPolicy = $2 + $2.scope = text/x-csharp + $0.TextStylePolicy = $3 + $3.FileWidth = 80 + $3.TabsToSpaces = True + $3.scope = text/plain + $0.TextStylePolicy = $4 + $4.inheritsSet = null + $4.scope = application/xml + $0.XmlFormattingPolicy = $5 + $5.DefaultFormat = $6 + $6.AttributesInNewLine = True + $6.WrapAttributes = True + $6.AlignAttributes = True + $5.scope = application/xml + EndGlobalSection EndGlobal diff --git a/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml b/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml index 9364c60..6e624c1 100644 --- a/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml +++ b/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml @@ -52,14 +52,14 @@ --> - #2196F3 + #FFFFFF