Frage

I want to convert the localization meta tag e.g. en-US to the display name, in this case English. The meta tag is stored in a ObservableCollection because it will be modified on runtime. I want to bind the display name to a combo box.

ComboBox:

<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>

Converter:

 class LanguageTagToNameConverter : IValueConverter
{
    public object Convert(object value,
                          Type targetType,
                          object parameter,
                          CultureInfo culture)
    {
        return CultureInfo.GetCultureInfo(value.ToString()).DisplayName;
    }


    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

ObservableCollection:

 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");
        }
    }
}

Unfortunately this approach does not work.

War es hilfreich?

Lösung

You need to put converter into resources:

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

    ...

    <TextBlock Text="{Binding, Converter={StaticResource convLang}}"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top