在MvvmCross我怎么做定制绑定属性在MvvmCross我怎么做定制绑定属性(In MvvmCr

2019-05-14 10:23发布

我使用MvxBindableListView到绑定List<>的数据对象的一个ListView 。 我使用该行布局有几个TextView秒。 我的成功结合Text对于这些财产在我的数据对象的属性,但我发现,我不能绑定到TextColor作为属性不会在单对于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'}
        }" />

Answer 1:

有添加自定义2路大会样本中“IsFavorite”结合的一个例子 - 见:

  • 结合- https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Bindings/FavoritesButtonBinding.cs
  • 在绑定设置FillTargetFactories在https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Setup.cs

:这个例子中所说明的比特进一步MVVMCross绑定Android中

对于单向“源到目标”自定义绑定,代码应该是一个很简单的-你只需要处理SetValue -并且不需要调用FireValueChanged在任何事件处理代码。


对于文字颜色,我想像的结合看起来有点像:

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)));
    }

注:我没有编译此示例代码 - 当你得到它的工作,请回来,并纠正这种伪代码:)



文章来源: In MvvmCross how do I do custom bind properties