Отделение визуальных атрибутов от классов данных?
Я пытаюсь найти правильный способ сделать это.
У меня есть приложение WinForms, которое использует PropertyGrid в качестве одного из элементов управления; Я использую свойство.SelectedObject, чтобы назначить соответствующий объект для отображения атрибутов.
PropertyGrid использует объявленные атрибуты для свойств класса этого объекта, чтобы определить визуальные объекты, например, если элемент видим (просматривается), если атрибут требует альтернативного рендеринга пользовательского интерфейса (например, раскрывающийся список или текстовое поле).
пример:
[TypeConverter(typeof(MyTypeConverter))]
public string MyAttribute
{
...
}
[Browsable(false)]
public string HiddenAttribute
{
...
}
Тем не менее, мне не нравится смешивание этих атрибутов, которые сильно связаны с пользовательским интерфейсом в моих классах данных, не связанных с другими.
Каков наилучший способ объявить эти необходимые атрибуты для PropertyGrid, не затрагивая мои классы данных?
1 ответ
У меня есть два варианта, чтобы предложить:
Используйте частичные классы, чтобы поместить ваши атрибуты в отдельный файл
или создайте отдельный класс для ваших атрибутов
Лично я предпочитаю вариант № 2, но для его полной реализации вам понадобится механизм, связывающий объект атрибута с вашим основным объектом. Наиболее общий способ сделать это - определить интерфейс, который будет возвращать объект атрибута, и реализовать этот интерфейс в первичном объекте. Затем измените свой код, который устанавливает свойство.SelectedObject в PropertyGrid, чтобы проверить этот интерфейс и использовать объект атрибута, если он реализован.