可能吗?:
//...
local:MvxBind="Text Format('{0} {1}', Stock, @string/in_stock)"/>
//...
Run Code Online (Sandbox Code Playgroud)
我想使用ViewModel的属性和strings.xml的字符串资源来构造文本值,但是上面的示例不起作用。
AFAIK不可能直接绑定到Android字符串。
使用Xamarin和Mvx,您应该使用resx文件来支持国际化(i18n)。
您可以resx使用ViewModel上的索引器轻松地从绑定访问文件:
public abstract class BaseViewModel : MvxViewModel
{
public string this[string key] => Strings.ResourceManager.GetString(key);
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中可以像这样使用它:
local:MvxBind="Text Format('{0} {1}', Stock, [InStock])"
还有另一种resx使用ResxLocalization插件绑定文件中的字符串的方法,即使它不支持Format,您也可以解决该问题(您可以检查此问题功能请求:将MvxLang与Format结合使用以跟踪此问题)
基本上,您可以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。顺便说一句,您可以同时使用它们,但是如果您使用Textin,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);
}
Run Code Online (Sandbox Code Playgroud)
并在您看来(由于Format我们无法MvxLang在此处使用):
local:MvxBind="Text Format('{0} {1}', Stock, [InStock])"
HIH
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |