Search code examples
xamarinxamarin.formsxamarin.android

OnElementChanged method is not there to override CollectionViewRenderer in Xamarin


I need to create custom control for CustomCollectionViewRenderer in Xamarin Forms as I need to show collection of images like Pinterest app in Xamarin forms. But OnElementChanged is not there to override CollectionViewRenderer. Am I doing something wrong here?

I'm using

  • Xamarin.Forms NuGet Package version as 4.0.2.70
  • Visual Studio Community 2019 for Mac Version 8.3.4 (build 8)
  • NuGet Version: 5.3.0.6192
  • Xamarin.iOS Version: 13.4.0.2 (Visual Studio Community)
  • Xamarin.Android Version: 10.0.3.0 (Visual Studio Community)
    [assembly: ExportRenderer(typeof(CollectionView), typeof(CustomCollectionViewRenderer))]
    namespace MyProj.Droid
    {
        public class CustomCollectionViewRenderer : CollectionViewRenderer
        {
            public CustomCollectionViewRenderer(Context context) : base(context)
            {
            }


            protected override void OnElementChanged(ElementChangedEventArgs<ItemsView> elementChangedEvent)
                {
                    base.OnElementChanged(elementChangedEvent);

                    if (elementChangedEvent.NewElement != null)
                    {
                       StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.Vertical);
                        SetLayoutManager(manager);
                   }
               }
            }
        }

Solution

  • I just Did the same in my VS19 for MAC with the following configuration and everything worked

    using Android.Content;
    using Android.Support.V7.Widget;
    using Test.Droid.PlatformRenderer;
    using System.ComponentModel;
    using Xamarin.Forms;
    using Xamarin.Forms.Platform.Android;
    
    [assembly: ExportRenderer(typeof(CollectionView), typeof(CustomCollectionViewRenderer))]
    
    namespace Test.Droid.PlatformRenderer
    {
        public class CustomCollectionViewRenderer : CollectionViewRenderer
        {
            public CustomCollectionViewRenderer(Context context) : base(context)
            {
            }
    
            protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs changedProperty)
            {
                base.OnElementPropertyChanged(sender, changedProperty);
            }
    
            protected override void OnElementChanged(ElementChangedEventArgs<ItemsView> elementChangedEvent)
            {
                base.OnElementChanged(elementChangedEvent);
                if (elementChangedEvent.NewElement != null)
                {
                    StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.Vertical);
                    SetLayoutManager(manager);
                }
            }
        }
     }
    

    VS config:

    Xamarin.Forms NuGet Package version 4.5.0.356

    Visual Studio Professional 2019 for Mac Version 8.3.4 (build 8)

    NuGet Version: 5.3.0.6192

    Xamarin.iOS Version: 13.4.0.2

    Xamarin.Android Version: 10.0.3.0

    So my guess is you need the latest XF!