void OnItemSelected(object sender, GenGridItemEventArgs e) { GengridItemContext context = e.Item.Data as GengridItemContext; Element.SelectedItem = context.Data; (Element as IGridViewController)?.SendItemSelected(new SelectedItemChangedEventArgs(context.Data, _itemList.IndexOf(context.Data))); }
View CreateOrGetRealView(GengridItemContext context) { if (context.RealizedView != null) { return(context.RealizedView); } var realView = CreateView(Element.ItemTemplate); realView.BindingContext = context.Data; realView.Parent = Element; context.RealizedView = realView; return(realView); }
void OnItemFocused(object sender, GenGridItemEventArgs e) { if (e.Item == null) { return; } GengridItemContext context = e.Item.Data as GengridItemContext; if (context.RealizedView == null) { context.RealizedView = CreateOrGetRealView(context); } (Element as IGridViewController)?.SendItemFocused(new GridViewFocusedEventArgs(context.Data, context.RealizedView, true)); }
EvasObject GetGridViewContent(object data, string part) { GengridItemContext context = (GengridItemContext)data; if (context.RealizedView == null) { context.RealizedView = CreateOrGetRealView(context); } if (part == "elm.swallow.icon") { var renderer = Platform.GetOrCreateRenderer(context.RealizedView); (renderer as LayoutRenderer)?.RegisterOnLayoutUpdated(); return(renderer.NativeView); } return(null); }
void UpdateItemsSource() { Control.Clear(); _gengridItemDic.Clear(); _itemHandleDic.Clear(); _itemList.Clear(); if (_collectionChanged != null) { _collectionChanged.CollectionChanged -= OnCollectionChanged; _collectionChanged = null; } if (Element.ItemsSource == null) { return; } foreach (var item in Element.ItemsSource) { var context = new GengridItemContext { Data = item, RealizedView = null, }; var gridItem = Control.Append(_gridItemClass, context); IntPtr handle = gridItem; _itemHandleDic.Add(handle, gridItem); _gengridItemDic.Add(item, gridItem); _itemList.Add(item); } if (Element.ItemsSource is INotifyCollectionChanged collection) { _collectionChanged = collection; collection.CollectionChanged += OnCollectionChanged; } }