在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”添加自定义双向绑定的示例 – 请参阅:
- 绑定 – https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Bindings/FavoritesButtonBinding.cs
- https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Setup.cs中的;
FillTargetFactories
中的绑定设置
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))); }
注:我没有编译这个示例代码 – 当你得到它的工作,请回来,纠正这个伪代码:)