在 WPF 中使用 MVVM 减少翻译属性的可能方法
Possible way to reduce translation properties with MVVM in WPF
我正在重构我们的应用程序。我们目前支持 2 种语言,逻辑位于 TranslationService
内,通过 DI 容器(如果重要,使用 Prism
注入)到视图模型中。
为了将翻译绑定到文本 属性 视图模型中有大量属性,例如
public string SomeText => _translationService.GetTranslation("someText");
public string AnotherText => _translationService.GetTranslation("notherText");
绑定照常进行
<TextBlock Text="{Binding SomeText}" HorizontalAlignment="Center" />
有没有办法减少这些属性?例如,将 Text
属性 绑定到带有参数的 GetTranslation
方法?
我看过 how to use ObjectDataProvider 但这并没有真正帮助我,因为根据我的理解,方法参数是硬编码的。
您可以声明一个带有单个索引器 属性 的助手 class,例如
public class Translation
{
private readonly TranslationService translationService;
public Translation(TranslationService service)
{
translationService = service;
}
public string this[string key]
{
get { return translationService.GetTranslation(key); }
}
}
将在您的视图模型中用作单个 属性:
public class ViewModel
{
public ViewModel()
{
Translation = new Translation(_translationService);
}
public Translation Translation { get; }
}
你可以这样绑定它:
<TextBlock Text="{Binding Translation[someText]}"/>
我正在重构我们的应用程序。我们目前支持 2 种语言,逻辑位于 TranslationService
内,通过 DI 容器(如果重要,使用 Prism
注入)到视图模型中。
为了将翻译绑定到文本 属性 视图模型中有大量属性,例如
public string SomeText => _translationService.GetTranslation("someText");
public string AnotherText => _translationService.GetTranslation("notherText");
绑定照常进行
<TextBlock Text="{Binding SomeText}" HorizontalAlignment="Center" />
有没有办法减少这些属性?例如,将 Text
属性 绑定到带有参数的 GetTranslation
方法?
我看过 how to use ObjectDataProvider 但这并没有真正帮助我,因为根据我的理解,方法参数是硬编码的。
您可以声明一个带有单个索引器 属性 的助手 class,例如
public class Translation
{
private readonly TranslationService translationService;
public Translation(TranslationService service)
{
translationService = service;
}
public string this[string key]
{
get { return translationService.GetTranslation(key); }
}
}
将在您的视图模型中用作单个 属性:
public class ViewModel
{
public ViewModel()
{
Translation = new Translation(_translationService);
}
public Translation Translation { get; }
}
你可以这样绑定它:
<TextBlock Text="{Binding Translation[someText]}"/>