在MvvmCross中,我如何进行自定义绑定属性

时间:2012-05-22 10:43:38

标签: c# xamarin.android mvvmcross

我正在使用MvxBindableListViewList<>个数据对象绑定到ListView。我用于行的布局有几个TextView s。我成功地将每个Text属性绑定到我的数据对象中的属性,但我发现我无法绑定到TextColor,因为Mono For Android中不存在该属性{{1 }} S;相反,你使用TextView方法。那么如何将数据对象属性绑定到方法?!以下是我尝试使用的代码:

SetTextColor()

1 个答案:

答案 0 :(得分:8)

有一个例子是在会议样本中为“IsFavorite”添加自定义双向绑定 - 请参阅:

MVVMCross Bindings in Android

中进一步解释了这个例子

对于单向“源到目标”自定义绑定,代码应该更简单 - 您只需要处理SetValue - 而不需要调用FireValueChanged在任何事件处理代码。


对于textColor,我认为绑定看起来有点像:

public class MyCustomBinding
    : MvxBaseAndroidTargetBinding
{
    private readonly TextView _textView;

    public MyCustomBinding(TextView textView)
    {
        _textView = textView;
    }

    public override void SetValue(object value)
    {
        var colorValue = (Color)value;
        _textView.SetTextColor(colorValue);
    }

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

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

将设置为:

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

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

注意:我没有编译这个示例代码 - 当你确实运行它时,请回来并更正这个伪代码:)