【问题标题】:Localization in a databound ComboBox isn't working correctly数据绑定 ComboBox 中的本地化无法正常工作
【发布时间】: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


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多