using System; using System.Linq; using System.Windows.Input; using Xamarin.Forms; using Xamarin.Forms.Xaml; using XF.Material.Forms.UI.Dialogs; namespace comal.timesheets { public class MobileListRefreshEventArgs : EventArgs { } public delegate void MobileListRefreshEvent(object sender, MobileListRefreshEventArgs args); public class MobileListItemTappedEventArgs : EventArgs { } public delegate void MobileListItemTappedEvent(object sender, MobileListItemTappedEventArgs args); public class MobileListViewModel : BindableObject { public int RowHeight { get; set; } public DataTemplate ItemTemplate { get; set; } public object ItemsSource { get; set; } public bool PullToRefresh { get; set; } public event MobileListRefreshEvent Refresh; public ICommand RefreshCommand => new Command(DoRefresh, CanRefresh); private bool CanRefresh(object sender) => PullToRefresh; private void DoRefresh(object sender) { IsRefreshing = true; Refresh?.Invoke(sender, new MobileListRefreshEventArgs()); IsRefreshing = false; } public bool IsRefreshing { get; private set; } } // public class MobileListDataTemplateSelector : DataTemplateSelector // { // // protected override DataTemplate OnSelectTemplate(object item, BindableObject container) => new DataTemplate(typeof(DeliveryListEntry)); // } [XamlCompilation(XamlCompilationOptions.Compile)] public partial class MobileList { public bool PullToRefresh { get => _viewmodel.PullToRefresh; set => _viewmodel.PullToRefresh = value; } public int RowHeight { get => _viewmodel.RowHeight; set => _viewmodel.RowHeight = value; } public DataTemplate ItemTemplate { get => _viewmodel.ItemTemplate; set => _viewmodel.ItemTemplate = value; } public object ItemsSource { get => _viewmodel.ItemsSource; set => _viewmodel.ItemsSource = value; } public event MobileListRefreshEvent Refresh; public event MobileListItemTappedEvent ItemTapped; public MobileList() { InitializeComponent(); _viewmodel.Refresh += DoRefresh; } private async void DoRefresh(object sender, MobileListRefreshEventArgs args) { Refresh?.Invoke(this, new MobileListRefreshEventArgs()); } private void Cell_OnTapped(object sender, EventArgs e) { //if (sender is ViewCell viewcell) // ItemTapped?.Invoke(viewcell.BindingContext, new MobileListItemTappedEventArgs()); } private void _list_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection.Any()) ItemTapped?.Invoke(e.CurrentSelection.First(), new MobileListItemTappedEventArgs()); } } }