我在Xamarin Studio中使用MVVM Cross:
我有一个文本视图,我想做这样的事情:
<TextView
android:id="@+id/title1"
android:layout_toRightOf="@+id/thumb1"
local:MvxBind="FormattedText Item.Description;"
/>
其中,Item.Description是在运行时设置的,并且等于:
"<b>The header</b>\\n\\nThe sub text"
或其他格式化的字符串.
我知道如果文本字符串通过使用资源文件是静态的,但是我的文本不是静态的,则可以执行此操作.
如果您给我提供可在Android和iOS XML上使用的解决方案,则可加分!
解决方法:
听起来这是学习MvvmCross Value Converters的绝佳时机.
从Wiki:
Value Converters in MvvmCross are used to provide mappings to/from
logical values in the view models and presented values in the user
interface.
在这种情况下,您可以创建一个继承自MvxValueConverter的新类,并重写Convert方法.您将在Convert方法中进行字符串格式化.然后在绑定中可以引用值转换器,MvvmCross将在显示绑定数据之前自动调用值转换器.
这是一个采用浮点数的数值转换器示例.作为输入并输出格式化的货币字符串:
public class CurrencyValueConverter : MvxValueConverter<float?, string>
{
protected override string Convert(float? value, Type targetType, object parameter, CultureInfo culture)
{
return !value.HasValue ? null : string.Format(culture, "{0:C}", value.Value);
}
}
然后,您可以在AXML内使用以下语法引用值转换器:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="[CashOnDeliveryCharges]"
local:MvxBind="Text Currency(CashOnDeliveryCharges), FallbackValue='N/A'" />