powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
5 сообщений из 5, страница 1 из 1
PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
    #38683312
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация:
атрибут:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class LocalizedDescriptionAttribute : DescriptionAttribute
{
  readonly string _resourceName;
  public LocalizedDescriptionAttribute(string resourceName)
  {
    _resourceName = resourceName;
  }

  public override string Description
  {
    get
    {
      return Resources.ResourceManager.GetString(_resourceName) ?? _resourceName;
    }
  }
}


Класс:
Код: c#
1.
2.
3.
4.
5.
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) - всё без толку.
Может, кто-то сталкивался с подобным?
...
Рейтинг: 0 / 0
PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
    #38683407
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,


Сон Веры ПавловныДалее, на основную форму шлепаем выбор локали (ru/en-US)
Здесь поподробнее, как?
...
Рейтинг: 0 / 0
PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
    #38683425
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
    #38683485
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationСон Веры Павловны,
Здесь поподробнее, как?
Код: c#
1.
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");


Где-то в степи, спасибо, гляну.
Судя по использованию кастомной имплементации ICustomTypeDescriptor, PG всё же где-то в статике кэширует тайпдескрипторы объектов, и нужны доп. действия, чтобы информация о типе подхватывалась в динамике.
...
Рейтинг: 0 / 0
PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
    #38683583
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

решение с реализацией ICustomTypeDescriptor сработало нормально. Спасибо, вопрос исчерпан.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / PropertyGrid - кэширование значений DescriptionAttribute свойств класса. Можно обойти?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]