我正在為我們的應用程式進行重構。我們目前支持 2 種語言,其中邏輯位于內部TranslationService,通過 DI 容器(Prism如果重要,則使用)注入到 View 模型中。
為了將翻譯系結到文本屬性,視圖模型中有大量屬性,例如
public string SomeText => _translationService.GetTranslation("someText");
public string AnotherText => _translationService.GetTranslation("notherText");
系結照常進行
<TextBlock Text="{Binding SomeText}" HorizontalAlignment="Center" />
有沒有辦法減少這些屬性?例如將Text屬性系結到GetTranslation帶有引數的方法?
我已經看到了如何使用 ObjectDataProvider但這并沒有真正幫助我,因為根據我的理解,方法引數是硬編碼的。
uj5u.com熱心網友回復:
您可以宣告一個具有單個索引器屬性的輔助類,例如
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]}"/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457464.html
上一篇:通過字串獲取類并呼叫它的方法
