使用索引键将.resx ResourceDictionary中的字符串绑定到TextBlock.Text

时间:2014-05-28 07:27:29

标签: c# wpf xaml localization resx

我尝试使用Properties / Resources.resx文件进行本地化,以不同语言获取视图。

我的模型如下所示:

class City 
{
    public int Id { get; set; }
    public string LocalizationKey { get; set; }
}

ViewModel:

class ViewModel
{
    public ObservableCollection<City> Cities { get; set; }
}

在我的观点中,我提供了以下代码:

<ItemsControl ItemsSource="{Binding Cities}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding LocalizationKey}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

当我想从字典中获取字符串键的值时,只有一个没有项目集合的项目,它可以通过使用以下代码正常工作:

<TextBlock Text="{x:Static properties:Resources.MyStringKey}" />

问题在于将上面的代码与ItemsControl一起使用,其中键是未知的!有没有办法通过使用LocalizationKey作为索引来访问字典值?

2 个答案:

答案 0 :(得分:1)

你能做点什么:

public class City
{
    public int Id { get; set; }
    public string LocalizationKey { get; set; }
    public City(string englishName)
    {
        LocalizationKey = Properties.Resources.ResourceManager.GetString(englishName);
    }
}

我不确定这个最佳做法;但它首先浮现在脑海中。

答案 1 :(得分:1)

经过数小时的网络搜索,我终于找到了使用转换器的解决方案,它可能不是解决问题的最佳实践,但至少它完全符合我的要求:

我的转换器:

public class LocalizationConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var key = value as string;
        if (!string.IsNullOrEmpty(key))
        {
            string dictionaryValue = Resources.ResourceManager.GetString(key);
            return dictionaryValue ?? key;
        }
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

和XAML代码:

<TextBlock Text="{Binding LocalizationId, Converter={StaticResource LocalizationConverter}}" />

感谢。