数据绑定ComboBox中的本地化无法正常工作

时间:2011-09-26 13:53:29

标签: c# wpf mvvm combobox converter

我想翻译我的组合框的项目。 所以我使用个性化转换器KeyToTranslationConverter将Enum值转换为翻译后的字符串。

[ValueConversion(typeof(object), typeof(string))]
public class KeyToTranslationConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
                                  object parameter, CultureInfo culture)
    {
        return LocalizationResourcesManager.GetTranslatedText(value);
    }
}

我的组合框绑定到可观察集合的LanguagesEntries,selectItem绑定到LanguageEntry属性。

<ComboBox ItemsSource="{Binding LanguageEntries}" 
              SelectedItem="{Binding LanguageEntry}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Converter={StaticResource Converter}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我的问题是: 当用户更改语言时,将调用该方法:

CollectionViewSource.GetDefaultView(this.LanguageEntries).Refresh();

所有项目集合均已翻译,但所选项目是重复的:

例如,所选项目“Anglais”未翻译,但英文单词位于组合框列表中。

有人可以帮助我。

阿诺。

1 个答案:

答案 0 :(得分:1)

我有这个确切的问题,我通过将转换器绑定到itemssource而不是itemtemplate来解决它。

<ComboBox ItemsSource="{Binding LanguageEntries, Converter={StaticResource LanguageEntriesConverter}}">

转换需要处理集合而不是每个项目:

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value is System.Collections.ObjectModel.Collection<string>)
        {
            foreach (var c in (System.Collections.ObjectModel.Collection<string>)value)
            {
                c = LocalizationResourcesManager.GetTranslatedText(c);
            }
        }
        return value;
    }

每次更新itemssource时都会调用转换器,方法是将其分配给新值或调用OnPropertyChanged。