C# 本地化语言标记以显示名称转换器

C# 本地化语言标记以显示名称转换器,c#,wpf,binding,localization,converter,C#,Wpf,Binding,Localization,Converter,我想将本地化元标记(例如en US)转换为显示名称,在本例中为英语。元标记存储在ObservableCollection中,因为它将在运行时被修改。我想将显示名称绑定到组合框 组合框: <ComboBox Grid.Column="1" Grid.Row="1" Width="200" VerticalAlignment="Center" HorizontalAlignment="Center" SelectedIndex="0" ItemsSource="{Binding Path=Se

我想将本地化元标记(例如en US)转换为显示名称,在本例中为英语。元标记存储在ObservableCollection中,因为它将在运行时被修改。我想将显示名称绑定到组合框

组合框:

<ComboBox Grid.Column="1" Grid.Row="1" Width="200" VerticalAlignment="Center" HorizontalAlignment="Center" SelectedIndex="0" ItemsSource="{Binding Path=ServerData.AvailableTemplateLanguages}">
       <ComboBox.ItemTemplate>
            <DataTemplate>
                   <TextBlock Text="{Binding, Converter=LanguageTagToNameConverter}" FontSize="12"/>
            </DataTemplate>
       </ComboBox.ItemTemplate>
</ComboBox>
可观察收集:

 public class ServerDataObj : ModelBase
{
    private ObservableCollection<string> _availableTemplateLanguages = new ObservableCollection<string> { "de-DE", "en-US" };
    public ObservableCollection<string> AvailableTemplateLanguages 
    { 
        get 
        {
            return _availableTemplateLanguages; 
        }
        set 
        {
            _availableTemplateLanguages = value;
            OnPropertyChanged("AvailableTemplateLanguages");
        }
    }
}
公共类ServerDataObj:ModelBase
{
私有ObservableCollection\u availableTemplateLanguages=新的ObservableCollection{“de de”,“en US”};
公共可观测收集可用样本语言
{ 
得到
{
返回可用的模板语言;
}
设置
{
_availableTemplateLanguages=值;
OnPropertyChanged(“可用模板语言”);
}
}
}

不幸的是,这种方法不起作用。

您需要将转换器放入资源中:

<Window>
    <Window.Resources>
        <LanguageTagToNameConverter x:Key="convLang"/>
    </Window.Resources>

    ...

    <TextBlock Text="{Binding, Converter={StaticResource convLang}}"/>

...

什么是“不起作用”?当我使用这个语法{Binding Converter=LanguageTagToNameConverter}时,如果没有逗号,“对象类型”System.String“无法转换为”System.Windows.Data.IValueConverter”。如果没有逗号,它就可以工作了。非常感谢你,伙计!资源已经设置好了,{StaticResource convLang}完成了这个技巧。。。
<Window>
    <Window.Resources>
        <LanguageTagToNameConverter x:Key="convLang"/>
    </Window.Resources>

    ...

    <TextBlock Text="{Binding, Converter={StaticResource convLang}}"/>