WPF - 从静态字典单例获取文本

时间:2018-02-08 07:49:56

标签: c# wpf static localization indexer

我在外部类库中获得了项目的本地化,因为我只需要一个Lang.csv文件用于翻译。

为此,我得到了一个静态实例Translator.TI,在命名空间TimeTracking.Lang中有一个索引器,而我的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>

问题:这可能吗?如何?如果没有:我可以通过使用针对静态单例的类属性来执行此操作吗?

1 个答案:

答案 0 :(得分:3)

无法使用{x:Static}扩展名的索引器。您可以使用Binding实现此目的,例如:

Title="{Binding Source={x:Static p:Translator.TI}, Path='[TimeTracking]'}"

INotifyPropertyChanged类中实现Translator接口也是一个好主意,以避免绑定内存泄漏并启用属性更改通知。