From 5907152c50ee2c658b266f2804e6b383bb15a6f1 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Sun, 24 Apr 2016 12:25:26 -0400 Subject: Evolve feature branch (#117) * Initial import of evolve features * [Android] Add Xamarin.Forms.Platform.Android.AppLinks project * [iOS] Fix issues with c# 6 features on iOS AppLinks * Added naive stanza to update-docs-windows.bat to produce Pages docs. Not tested. (#69) * Update packages * Add AppLinks android nuspec and fix linker issues * Fix build * Fix nusepc * Fix nuspec * Update android support nugets to 23.2.1 * Update Xamarin.UITest * Add CardView * [iOS] Fix app link for CoreSpotlight * [Android] Update AppLinks android support libs * Add Newtonsoft.Json dependency to nuspec * Fix NRE when setting ControlTemplate to null * Move to ModernHttpClient for download * Try fix build * Preserve android app links * Fix margin issue * General coding and simple fixes --- Xamarin.Forms.Pages/ListDataPage.cs | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Xamarin.Forms.Pages/ListDataPage.cs (limited to 'Xamarin.Forms.Pages/ListDataPage.cs') diff --git a/Xamarin.Forms.Pages/ListDataPage.cs b/Xamarin.Forms.Pages/ListDataPage.cs new file mode 100644 index 00000000..2a2585ec --- /dev/null +++ b/Xamarin.Forms.Pages/ListDataPage.cs @@ -0,0 +1,55 @@ +namespace Xamarin.Forms.Pages +{ + public class ListDataPageControl : ListView + { + public ListDataPageControl() + { + SetBinding(ItemTemplateProperty, new TemplateBinding(DataPage.DefaultItemTemplateProperty.PropertyName)); + SetBinding(SelectedItemProperty, new TemplateBinding(ListDataPage.SelectedItemProperty.PropertyName, BindingMode.TwoWay)); + SetBinding(ItemsSourceProperty, new TemplateBinding(DataPage.DataProperty.PropertyName)); + } + } + + public class ListDataPage : DataPage + { + public static readonly BindableProperty DetailTemplateProperty = BindableProperty.Create(nameof(DetailTemplate), typeof(DataTemplate), typeof(ListDataPage), null); + + public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create(nameof(SelectedItem), typeof(object), typeof(ListDataPage), null, BindingMode.TwoWay, + propertyChanged: OnSelectedItemChanged); + + public DataTemplate DetailTemplate + { + get { return (DataTemplate)GetValue(DetailTemplateProperty); } + set { SetValue(DetailTemplateProperty, value); } + } + + public object SelectedItem + { + get { return GetValue(SelectedItemProperty); } + set { SetValue(SelectedItemProperty, value); } + } + + static async void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue) + { + var self = (ListDataPage)bindable; + DataTemplate template = self.DetailTemplate; + if (newValue == null) + return; + + Page detailPage; + if (template == null) + { + detailPage = new DataPage(); + } + else + { + detailPage = (Page)template.CreateContent(newValue, self); + } + + detailPage.BindingContext = newValue; + await self.Navigation.PushAsync(detailPage); + + self.SelectedItem = null; + } + } +} \ No newline at end of file -- cgit v1.2.3