你是對的 - 在該綁定中使用的默認MvxLanguageConverter實際上只適用於簡單的靜態文本。
對於更多的相關情況,您需要爲每種情況構建自己的轉換器 - 但希望其中的一些可以重用。
作爲起始例如,檢查出的會議樣品顯示使用如何鳴叫倍TimeAgoConverter.cs
public class TimeAgoValueConverter
: MvxBaseValueConverter
, IMvxServiceConsumer<IMvxTextProvider>
{
private IMvxTextProvider _textProvider;
private IMvxTextProvider TextProvider
{
get
{
if (_textProvider == null)
{
_textProvider = this.GetService<IMvxTextProvider>();
}
return _textProvider;
}
}
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var when = (DateTime)value;
string whichFormat;
int valueToFormat;
if (when == DateTime.MinValue)
{
whichFormat = "TimeAgo.Never";
valueToFormat = 0;
}
else
{
var whenUtc = when.ToUniversalTime();
var difference = (DateTime.UtcNow - whenUtc).TotalSeconds;
if (difference < 30.0)
{
whichFormat = "TimeAgo.JustNow";
valueToFormat = 0;
}
// ... etc
}
var format = TextProvider.GetText(Constants.GeneralNamespace, Constants.Shared, whichFormat);
return string.Format(format, valueToFormat);
}
}
這是Android axml使用像在https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Resources/Layout/ListItem_Tweet.xml:
<TextView
android:id="@+id/TimeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10dip"
android:textColor="@color/icongrey"
local:MvxBind="{'Text':{'Path':'Item.Timestamp','Converter':'TimeAgo'}}"
/>
我定義包含一個LocalizationBag類LanguageBinder和一個stringtofind屬性,並將一個新的屬性CustomBag添加到AboutViewModel以將TextView文本綁定到它。在MvxLanguageBinderConverter中,我檢查值是IMvxLanguageBinder還是LocalizationBag。如果使用IMvxLanguageBinder,則使用靜態引擎,但如果使用LocalizationBag,則將statict參數替換爲stringtofind以提供動態引擎。使用會議樣本進行測試,我將嘗試使用我的枚舉運行。 – Alphapage
很想看到你的博客一些這個地方;) – Stuart
沒有博客對我抱歉!我會用我的代碼發佈一個新的評論功能給github。我的枚舉翻譯現在正在努力。感謝您的幫助。 – Alphapage