我想翻译我的组合框的项目。 所以我使用个性化转换器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”未翻译,但英文单词位于组合框列表中。
有人可以帮助我。
阿诺。
答案 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。