【发布时间】:2011-11-25 05:59:53
【问题描述】:
我想翻译我的组合框的项目。 所以我使用了一个个性化的转换器 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在组合框列表中。
谁能帮帮我。
阿诺。
【问题讨论】:
-
简单解决方案:不使用转换器,而是在模型上公开 LocalizedName 属性并绑定到该属性。
-
当然,您的解决方案有效。我想使用转换器,因为我的视图模型有很多枚举集合,因此您的解决方案需要太多时间。如果我的视图模型不包含翻译代码,我认为它更易于使用。
-
将 SelectedItem 属性绑定到视图模型的某个属性,并且当您更改语言时 - 刷新绑定的选定属性。
-
刷新视图后,我将选定的属性设置为枚举值并发送 PropertyChangedEventHandler 事件。 IHM 获取属性但未调用转换器,并显示旧的翻译值。
标签: c# wpf mvvm combobox converter