C# 使用XAML从DB获得WPF多语言支持

C# 使用XAML从DB获得WPF多语言支持,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在尝试扩展我的WPF应用程序,以便从数据库获得多语言支持 我的方法将使用ResourceKey来识别每个控件的内容 创建此is MVVM只需更改属性以使用资源和所选语言查询数据库,如下所示: public string Example { get { if (SelectedLanguage == null) return string.Empty; return

我正在尝试扩展我的WPF应用程序,以便从数据库获得多语言支持

我的方法将使用ResourceKey来识别每个控件的内容

创建此is MVVM只需更改属性以使用资源和所选语言查询数据库,如下所示:

    public string Example
    {
        get
        {
            if (SelectedLanguage == null)
                return string.Empty;

            return ControlMapping.getKey("MainWindow_TxtBoxExample", SelectedLanguage.LanguageID);
        }
    }
为了使绑定正常工作,我设置了一个转换器,它将获取密钥并从DB中选择适当的值

public class LanguageSupport : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return ControlMapping.getKey(value.ToString(), SelectedLanguage.LanguageID);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
然后在窗口中,我创建了一个静态资源来访问转换器

<Window.Resources>
    <LangSupport:LanguageSupport x:Key="ls"/>
</Window.Resources>

不幸的是,如果我被卡住了

我猜转换器不是填充各种控件内容的正确方法


非常感谢您提供的任何帮助。

我提供了对mscorlib的引用,以访问String类

    xmlns:sys="clr-namespace:System;assembly=mscorlib"
然后我定义了一个可以用来分配给控件的资源

<Window.Resources>
    <LangSupport:LanguageSupport x:Key="ls"/>
    <sys:String x:Key="hardccodedstring">MainWindow.hardcodedstring</sys:String>
</Window.Resources>

你必须为你拥有的每个绑定指定你的转换器,这不是自动完成的。我意识到这一点,但这是难以捉摸的部分。当我开始的时候,我编写了代码,但是这不起作用。根据Window.Resources,您需要通过更改绑定,其中ls是您的转换器密钥。但是,如果您在许多窗口中使用它,我建议将它放在您的App.Resources(在App.xaml上)中,恐怕这不起作用。内容为空,转换器上的断点未被命中。应用程序资源通常是我的方法,但由于项目限制,它不是一个选项。使用转换器是一种非常笨拙的方法。ResourceManager只是一个在资源文件中查找内容的静态类——您可以创建自己的ResourceManager,从数据库中检索。
<Label Name="ex3" Content="{Binding Converter={StaticResource ls}, ConverterParameter={StaticResource hardccodedstring}}"/>
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (parameter == null)
            return string.Empty;

        return ControlMapping.getKey(parameter.ToString(), SelectedLanguage.LanguageID);
    }