diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
index d2c42fc..2504305 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
@@ -52,7 +51,7 @@
-
+
@@ -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..7210c40 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj
+++ b/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj
@@ -133,13 +133,13 @@
-
+
- {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..0988662 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj
+++ b/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj
@@ -11,8 +11,12 @@
-
+
+
+
+
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge/ViewModels/ViewModel.cs b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/ViewModel.cs
new file mode 100644
index 0000000..920f434
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/ViewModel.cs
@@ -0,0 +1,53 @@
+using System;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Linq;
+using NLipsum.Core;
+
+namespace CollectionViewChallenge
+{
+ public class ViewModel : INotifyPropertyChanged
+ {
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public String Column1 { get; set; } = String.Empty;
+ public String Column2 { get; set; } = String.Empty;
+
+ LipsumGenerator lipsum = new LipsumGenerator();
+ Random random = new Random(DateTime.Now.Millisecond);
+ bool collapsed = false;
+
+ public ViewModel()
+ {
+ CreateRandomText();
+ }
+
+ public void Toggle()
+ {
+ collapsed = !collapsed;
+ CreateRandomText();
+ }
+
+ void CreateRandomText()
+ {
+ if (collapsed)
+ {
+ Column1 = "Tap to create random Text!";
+ Column2 = String.Empty;
+ }
+ else
+ {
+ var words = lipsum.GenerateWords(random.Next(5, 50));
+ var text = String.Join(" ", words.ToArray());
+
+ Column1 = text;
+
+ words = lipsum.GenerateWords(random.Next(2, 20));
+ text = String.Join(" ", words.ToArray());
+
+ Column2 = text;
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml
index f2da7f7..a83612f 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml
+++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml
@@ -1,31 +1,57 @@
-
+
+
+
+
+
-
-
-
-
- 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?
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs
index 701124f..1665bd6 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs
+++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs
@@ -3,6 +3,8 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using DynamicData;
+using DynamicData.Binding;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
@@ -12,9 +14,50 @@ namespace CollectionViewChallenge.Views
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CollectionViewChallengePage : ContentPage
{
- public CollectionViewChallengePage()
+ public IObservableCollection Data { get; } = new ObservableCollectionExtended();
+ SourceList List = new SourceList();
+
+ public CollectionViewChallengePage()
{
InitializeComponent();
- }
- }
+
+ List.AddRange(Enumerable.Range(0, 1000).Select(x => new ViewModel()));
+ List.Connect().Bind(Data).DisposeMany().Subscribe();
+
+ BindingContext = this;
+ }
+
+ void OnClearClicked(object sender, EventArgs e)
+ {
+ // verify that PropertyChanged interface works
+ Data.PropertyChanged += (sn, ev) =>
+ {
+ Console.WriteLine("Data changed");
+ };
+
+ List.Clear();
+ }
+
+ void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (e.CurrentSelection.Count == 0)
+ return;
+
+ var item = e.CurrentSelection.FirstOrDefault() as ViewModel;
+ item.Toggle();
+ var colView = sender as CollectionView;
+ UpdateSelection(colView, item);
+ }
+
+ async void UpdateSelection(CollectionView colView, ViewModel item)
+ {
+ TBUpdating.Text = "Updating Selection ...";
+
+ await Task.Delay(1000); // make scroll action visible
+ colView.ScrollTo(item, position: ScrollToPosition.Center);
+ colView.SelectedItem = null;
+
+ TBUpdating.Text = String.Empty;
+ }
+ }
}
\ No newline at end of file