AFAIK невозможно напрямую привязать к строке Android.
Работая с Xamarin и Mvx, вы должны использовать resx
файлы для поддержки интернационализации (i18n).
Вы можете легко получить доступ к файлу resx
из привязки, используя индексатор на вашей ViewModel:
public abstract class BaseViewModel : MvxViewModel
{
public string this[string key] => Strings.ResourceManager.GetString(key);
}
Тогда в вашем View вы можете использовать его как:
local:MvxBind="Text Format('{0} {1}', Stock, [InStock])"
Существует еще один способ связать строки в файлах resx
, использующий плагин ResxLocalization , и хотя он не поддерживает Format
, но вы можете обойти его (вы можете проверить эту проблему Запрос функции: объедините MvxLang с форматом , чтобы отслеживать это)
Обычно вы создаете файл Strings.resx
в своем проекте PCL / NetStandard / Shared и регистрируете его:
Mvx.RegisterSingleton(new MvxResxTextProvider(Strings.ResourceManager));
Затем в вашей базовой модели представления вам необходимо реализовать это свойство, чтобы ваши виды и модели представления имели доступ к i18n:
public IMvxLanguageBinder TextSource => new MvxLanguageBinder("", GetType().Name);
Наконец, на ваш взгляд, вы можете позвонить, используя:
local:MvxLang="Text InStock"
Обратите внимание, что он использует MvxLang
вместо MvxBind
. Кстати, вы можете использовать оба из них, но если вы используете Text
в MvxLang
, то не используйте его в MvxBind
, потому что возникнут проблемы.
Наконец, вы можете объединить плагин с индексатором, чтобы уменьшить связь между файлами ViewModel и resx
и обойти поддержку Format
в привязке, как показано ниже (взято из упомянутой выше проблемы):
public abstract class BaseViewModel : MvxViewModel
{
private IMvxTextProvider _textProvider;
public BaseViewModel(IMvxTextProvider textProvider)
{
_textProvider = textProvider;
}
public string this[string key] => _textProvider.GetText("", "", key);
}
и по вашему мнению (из-за Format
мы не можем использовать MvxLang
здесь):
local:MvxBind="Text Format('{0} {1}', Stock, [InStock])"
Е.И.В.