绑定组合框中的本地化工作不正确
本文关键字:本地化 工作 不正确 组合 绑定 | 更新日期: 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.