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

我使用MvxBindableListView将数据对象的List<>绑定到ListView 。 我用于行的布局有几个TextView 。 我成功地将每个这些的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'} }" /> 

在会议样本中为“IsFavorite”添加自定义双向绑定的示例 – 请参阅:

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

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