Search code examples
c#androidmvvmcross

Hook property binding


I am trying to hook an ImageUrl property to MvxImageView, to implement my own image caching service.

I have tried using a PropertyConverter that gets the value, but I don't receive a response.

Then, I tried my own implementation for IMvxImageHelper, but I get an unusual behaviour because I using a list with images, all images containers get the same picture and when I swipe the list, the picture changes in all MvxImageView widgets.

This implementation is in a Setup file in CreateApp method using a RegisterSingleton.

What is the correct way to hook into the process of caching images?


Solution

  • If you want to replace the entire download and caching chain then the easiest interface to provide is IMvxImageHelper<Bitmap> - it's expected that this is registered as Mvx.RegisterType - so that each image view will get a new helper object.

    If you want to replace just parts of the download and caching, then you can instead provide implementations of:

            IMvxHttpFileDownloader
            IMvxImageCache<Bitmap>
            IMvxLocalFileImageLoader<Bitmap>
    

    There's no documentation available for these - but these api's are very small and the source code is available as a reference.


    Then, I tried my own implementation for IMvxImageHelper, but I get an unusual behaviour because I using a list with images, all images containers get the same picture and when I swipe the list, the picture changes in all MvxImageView widgets.

    I would guess you had a bug in your image helper implementation or in it's registration with IOC.


    One other alternative you can consider is implementing your own custom ImageView class with its own ImageUrl property - you don't have to use MvxImageView