Отделение визуальных атрибутов от классов данных? - PullRequest
0 голосов
/ 03 августа 2010

Я пытаюсь найти правильный способ сделать это.

У меня есть приложение WinForms, которое использует PropertyGrid в качестве одного из элементов управления; Я использую свойство .SelectedObject, чтобы назначить соответствующий объект для отображения атрибутов.

PropertyGrid использует объявленные атрибуты для свойств класса этого объекта для определения визуальных объектов, например, если элемент видим (доступен для просмотра), если для атрибута требуется альтернативный рендеринг пользовательского интерфейса (например, раскрывающийся список или текстовое поле).

пример:

    [TypeConverter(typeof(MyTypeConverter))]
    public string MyAttribute
    {
       ...
    }

    [Browsable(false)]
    public string HiddenAttribute
    {
       ...
    }

Однако мне не нравится смешивание этих атрибутов, которые сильно связаны с пользовательским интерфейсом в моих классах данных, не связанных с другими.

Каков наилучший способ объявления этих необходимых атрибутов для PropertyGrid, не мешая моим классам данных?

1 Ответ

0 голосов
/ 25 октября 2010

У меня есть два варианта:

  1. Использование частичных классов для помещения ваших атрибутов в отдельный файл

  2. или создайте отдельный класс для ваших атрибутов

Я лично предпочитаю вариант # 2, но для его полной реализации вам понадобится механизм, связывающий объект атрибута с вашим основным объектом. Наиболее общий способ сделать это - определить интерфейс, который будет возвращать объект атрибута, и реализовать этот интерфейс в первичном объекте. Затем измените код, который устанавливает свойство .SelectedObject в PropertyGrid, чтобы проверить этот интерфейс и использовать объект атрибута, если он реализован.

...