WPF - 从静态字典单例中获取文本
WPF - Get text from static Dictionary Singleton
我在外部 class 库中获得了项目的本地化,因为我只需要一个 Lang.csv
文件来进行翻译。
为此,我在命名空间 TimeTracking.Lang
中获得了一个带有索引器的静态实例 Translator.TI
,而我的 WPF 应用程序位于主项目的命名空间 TimeTracking.View
中(所以不同的项目,但相同的基本命名空间)。
namespace TimeTracking.Lang
{
public class Translator
{
public static readonly Translator TI = new Translator();
private readonly Dictionary<string, Translation> _translations;
public string this[string key]
{
get { ... }
}
...
}
}
现在我想将我的翻译从这个静态单例实例加载到视图中。
<Window
...
xmlns:p="clr-namespace:TimeTracking.Lang;assembly=TimeTrackingShared"
Title="{x:Static p.Translator.TI[TimeTracking]}"
>
...
</Window>
问题:这可能吗?如何实现?如果不是:我可以通过使用针对静态单例的 class 属性 来做到这一点吗?
无法使用扩展名为 {x:Static}
的索引器。您可以使用 Binding
实现此目的,例如:
Title="{Binding Source={x:Static p:Translator.TI}, Path='[TimeTracking]'}"
在您的 Translator
class 中实现 INotifyPropertyChanged
接口也是一个好主意,以避免绑定内存泄漏并启用 属性 更改通知。
我在外部 class 库中获得了项目的本地化,因为我只需要一个 Lang.csv
文件来进行翻译。
为此,我在命名空间 TimeTracking.Lang
中获得了一个带有索引器的静态实例 Translator.TI
,而我的 WPF 应用程序位于主项目的命名空间 TimeTracking.View
中(所以不同的项目,但相同的基本命名空间)。
namespace TimeTracking.Lang
{
public class Translator
{
public static readonly Translator TI = new Translator();
private readonly Dictionary<string, Translation> _translations;
public string this[string key]
{
get { ... }
}
...
}
}
现在我想将我的翻译从这个静态单例实例加载到视图中。
<Window
...
xmlns:p="clr-namespace:TimeTracking.Lang;assembly=TimeTrackingShared"
Title="{x:Static p.Translator.TI[TimeTracking]}"
>
...
</Window>
问题:这可能吗?如何实现?如果不是:我可以通过使用针对静态单例的 class 属性 来做到这一点吗?
无法使用扩展名为 {x:Static}
的索引器。您可以使用 Binding
实现此目的,例如:
Title="{Binding Source={x:Static p:Translator.TI}, Path='[TimeTracking]'}"
在您的 Translator
class 中实现 INotifyPropertyChanged
接口也是一个好主意,以避免绑定内存泄漏并启用 属性 更改通知。