using System; using System.Collections.Generic; using System.Linq; using Xamarin.Forms; namespace Aurora.Design.Components.Library { public partial class Library : ContentView { public Library() { InitializeComponent(); this.LibraryDataGrid.ItemSelected += (sender, e) => { this.SelectedItem = e.SelectedItem; }; } #region ItemsSource Property /// /// Bindable Property for the ItemsSource of the datagrid. /// /// /// /// public static readonly BindableProperty ItemsSourceProperty = BindableProperty.Create(propertyName: "ItemsSource", returnType: typeof(IEnumerable), declaringType: typeof(Library), defaultBindingMode: BindingMode.Default, propertyChanged: (BindableObject bindable, object oldValue, object newValue) => { Library control = bindable as Library; control.LibraryDataGrid.ItemsSource = (IEnumerable)newValue; }); /// /// Backing property for the ItemsSource property. /// /// public IEnumerable ItemsSource { get { return (IEnumerable)GetValue(ItemsSourceProperty); } set { SetValue(ItemsSourceProperty, value); } } #endregion ItemsSource Property /// /// Bindable property for the selected item field on the datagrid. /// /// /// /// public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create(propertyName: "SelectedItem", returnType: typeof(object), declaringType: typeof(Library), defaultBindingMode: BindingMode.TwoWay); /// /// Backing property for the SelectedItem property. /// /// public object SelectedItem { get { return ((object)GetValue(SelectedItemProperty)); } set { SetValue(SelectedItemProperty, value); } } /// /// Bindable property for the item double clicked command /// /// /// /// public static readonly BindableProperty ItemDoubleClickedProperty = BindableProperty.Create(propertyName: "ItemDoubleClicked", returnType: typeof(Command), declaringType: typeof(Library), propertyChanged: OnDoubleClickPropertyChanged); /// /// Public backing property /// /// public Command ItemDoubleClicked { get { return (Command)GetValue(ItemDoubleClickedProperty); } set { SetValue(ItemDoubleClickedProperty, value); } } /// /// Event handler for double click property. Adds command execute handler. /// /// /// /// private static void OnDoubleClickPropertyChanged(BindableObject bindable, object newValue, object oldValue) { Library control = bindable as Library; var dataGrid = control.LibraryDataGrid; if (dataGrid.GestureRecognizers.Count > 0) { var gestureRecognizer = dataGrid.GestureRecognizers.First(); if (gestureRecognizer is TapGestureRecognizer) { TapGestureRecognizer tap = gestureRecognizer as TapGestureRecognizer; tap.Tapped += (sender, e) => { control.ItemDoubleClicked.Execute(null); }; } } } } }