using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace comal.timesheets { public class ToolGridViewModel : BindableObject { public IList Items { get; private set; } public IList VisibleItems { get; private set; } public ToolGridViewModel() { Items = new ObservableCollection(); VisibleItems = new ObservableCollection(); ((ObservableCollection)Items).CollectionChanged += (sender, args) => { VisibleItems.Clear(); foreach (var item in Items.Where(x=>x.IsVisible)) VisibleItems.Add(item); }; } } [XamlCompilation(XamlCompilationOptions.Compile)] public partial class ToolGrid { public IList Items => _viewModel.Items; public ToolGrid() { InitializeComponent(); BindableLayout.SetItemsSource(_flexgrid, _viewModel.VisibleItems); } private void ImageTapped(object sender, EventArgs e) { if ((sender is Image image) && (image.BindingContext is ToolItem item)) item.DoTap(); } } }