一尘不染

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

c#

MvxBindableListView用来将List<>数据对象绑定到ListView。我用于行的布局有几个TextViews。我已经成功地将Text每个属性绑定到数据对象中的一个属性,但是我发现我无法绑定到TextColor该属性,因为该属性在Mono
For
Android中不存在TextView;相反,您已经使用了该SetTextColor()方法。那么如何将数据对象属性绑定到方法?以下是我尝试使用的代码:

    <TextView
        android:id="@+id/MyValueTextView"
        android:layout_width="50dp"
        android:layout_height="20dp"
        android:layout_gravity="right"
        android:gravity="center_vertical|right"
        android:textSize="12sp"
        local:MvxBind="
        {
          'Text':{'Path':'MyValue','Converter':'MyValueConverter'},
          'TextColor':{'Path':'MyOtherValue','Converter':'MyOtherConverter'}
        }" />

阅读 448

收藏
2020-05-19

共1个答案

一尘不染

在会议示例中有一个示例为“ IsFavorite”添加自定义2向绑定-请参见:

在以下示例中进一步解释了此示例:Android中的MVVMCross
Bindings

对于单向“源到目标”自定义绑定,该代码应该更简单-您只需要处理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)));
    }

注意:我尚未编译此示例代码-当您使其正常工作时,请返回并更正此伪代码:)

2020-05-19