Ситуация:
атрибут:
class LocalizedDescriptionAttribute : DescriptionAttribute
{
readonly string _resourceName;
public LocalizedDescriptionAttribute(string resourceName)
{
_resourceName = resourceName;
}
public override string Description
{
get
{
return Resources.ResourceManager.GetString(_resourceName) ?? _resourceName;
}
}
}
Класс:
class Foo
{
[LocalizedDescription("Foo_Bar")]
public int Bar { get; set; }
}
Соответственно, в главном resx для локали ru создаем строчку Foo_Bar с значением "Свойство", в en.resx - Foo_Bar со значением "Property". Далее, на основную форму шлепаем выбор локали (ru/en-US), и вызов дочерней формы с PropertyGrid'ом, в который мы скармливаем экземпляр Foo. Если до переключения локаль была ru, то после переключения на en в пропертигриде остается русское описание, и наоборот. Причем если после переключения локали выводить значение атрибута через рефлекшн в консоль, то всё в порядке - значение соответствует установленной локали, и проблема не в атрибуте и не в менеджере ресурсов, а в пропертигриде. Причем кэшируется почему-то именно DescriptionAttribute - на свойствах класса в реальности еще висят атрибуты LocalizedDispalyNameAttribute, реализованные аналогично вышеприведенному коду - эти атрибуты нормально подхватывают изменения локали, и в гриде отображаются корректно.
Что пробовал: PropertyGrid.Refresh - без толку. Поковырявшись в исходниках, попробовал дернуть internal/private методы ClearCachedProps, ClearValueCaches, и RefreshProperties(bool clearCached) - всё без толку.
Может, кто-то сталкивался с подобным?