我想使用Android中的If-Else ValueCombiner来绑定TextView的TextStyle属性。我尝试了以下方法,但无法创建绑定:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_gravity="center_vertical"
android:layout_row="0"
android:layout_column="1"
android:textSize="28dp"
android:gravity="left"
android:text="MyText"
local:MvxBind="TextStyle If(ShowBold, 'bold', 'normal')" />
我使用Text属性测试了类似的绑定,它运行正常,所以我猜它还在寻找字符串以外的东西吗?
答案 0 :(得分:2)
有点晚了,但我有同样的要求,现在就做了。
在您的设置文件中添加以下内容(我有两个自定义绑定属性,样式和摘要):
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterFactory(new MvxCustomBindingFactory<TextView>("Style", textView => new StyleTextViewBinding(textView)));
registry.RegisterFactory(new MvxCustomBindingFactory<TextView>("Summary", textView => new SummaryTextViewBinding(textView)));
}
在我的TextView中(我的自定义绑定显然是样式,文字和 TextColor 是转换器):
<TextView
style="@style/TeamDifficulty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/dummy_title"
local:MvxBind="Text TeamDifficultyText(RowItem.DifficultyEnumCaptain1Int); TextColor TeamDifficultyTextColor(RowItem.DifficultyEnumCaptain1); Style RowItem.DifficultyEnumCaptain1;" />
实际代码(基本上它会检查我的文本是否为空,如果是,它会加粗,因为我的转换器会在之后添加一个值):
public class StyleTextViewBinding : MvxAndroidTargetBinding
{
readonly TextView _textView;
public StyleTextViewBinding(TextView textView) : base(textView)
{
_textView = textView;
}
#region implemented abstract members of MvxConvertingTargetBinding
protected override void SetValueImpl(object target, object value)
{
_textView.SetTypeface(_textView.Typeface, Android.Graphics.TypefaceStyle.Bold);
if (value != null && Convert.ToBoolean(value))
_textView.SetTypeface(_textView.Typeface, Android.Graphics.TypefaceStyle.Normal);
}
#endregion
public override Type TargetType
{
get { return typeof(bool); }
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.OneWay; }
}
}
希望这有帮助!
答案 1 :(得分:0)
以下是Stuart帮助其他人的文字颜色示例。 In MvvmCross how do I do custom bind properties
使用它你应该能够为文本样式设计逆向工程。