我MvxBindableListView用来将List<>数据对象绑定到ListView。我用于行的布局有几个TextViews。我已经成功地将Text每个属性绑定到数据对象中的一个属性,但是我发现我无法绑定到TextColor该属性,因为该属性在Mono For Android中不存在TextView;相反,您已经使用了该SetTextColor()方法。那么如何将数据对象属性绑定到方法?以下是我尝试使用的代码:
MvxBindableListView
List<>
ListView
TextView
Text
TextColor
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”添加自定义2向绑定-请参见:
FillTargetFactories
在以下示例中进一步解释了此示例:Android中的MVVMCross Bindings
对于单向“源到目标”自定义绑定,该代码应该更简单-您只需要处理SetValue-,而无需FireValueChanged在任何事件处理代码中调用。
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))); }
注意:我尚未编译此示例代码-当您使其正常工作时,请返回并更正此伪代码:)