绑定组合框中的本地化工作不正确

本文关键字:本地化 工作 不正确 组合 绑定 | 更新日期: 2023-09-27 18:09:56

我想翻译组合框中的项。因此,我使用一个个性化的转换器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"没有翻译,但单词English在组合框列表中。

有人能帮帮我吗?

Arnaud .

绑定组合框中的本地化工作不正确

我遇到了这个问题,我通过将转换器绑定到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.