In MvvmCross how do I do custom bind properties


There's an example of adding a custom 2-way binding for "IsFavorite" in the Conference sample - see:

This example is explained a bit further in: MVVMCross Bindings in Android

For a one-way "source-to-target" custom binding, the code should be a bit simpler - you only need to handle the SetValue - and don't need to invoke FireValueChanged in any event handling code.

For textColor, I'd imagine the binding would look a bit like:

public class MyCustomBinding
    : MvxBaseAndroidTargetBinding
    private readonly TextView _textView;

    public MyCustomBinding(TextView textView)
        _textView = textView;

    public override void SetValue(object value)
        var colorValue = (Color)value;

    public override Type TargetType
        get { return typeof(Color); }

    public override MvxBindingMode DefaultMode
        get { return MvxBindingMode.OneWay; }

and would be setup with:

    protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)

        registry.RegisterFactory(new MvxCustomBindingFactory<TextView>("TextColor", (textView) => new MyCustomBinding(textView)));

Note: I've not compiled this example code - when you do get it working, please come back and correct this pseudo-code :)

Jason Steele
Author by

Jason Steele

Updated on June 16, 2022


  • Jason Steele
    Jason Steele about 2 years

    I am using MvxBindableListView to bind a List<> of data objects to a ListView. The layout I am using for the rows has several TextViews. I am successfully binding the Text property for each of these to a property in my data object, but I have found that I cannot bind to TextColor as that property does not exist in Mono For Android TextViews; instead you have use the SetTextColor() method. So how can I bind a data object property to a method?! Below is the code I tried to use:

            }" />