在 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]}"/>