我尝试使用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作为索引来访问字典值?
答案 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}}" />
感谢。