Как сохранить значения, введенные во время разработки, для сложного свойства? - PullRequest
2 голосов
/ 27 октября 2010

Я все еще изучаю веревки, когда дело доходит до реализации пользовательских редакторов для сложных свойств во время разработки.

В качестве простой начальной точки я пытаюсь включить во время разработки свойство типа ICollection<string>.

.

То, что я сделал до сих пор:

  • Написал класс StringsEditor, который наследуется от UITypeEditor и отображает раскрывающийся список, в который разработчик может вводить несколько строк в отдельных строках, которые впоследствии добавляются в коллекцию. Это отлично работает.
  • Написал класс StringsConverter, который наследуется от TypeConverter и конвертируется между объектами типа string и ICollection<string> (ну, любой тип T, который реализует ICollection<string>), так что когда разработчик закрывает В раскрывающемся списке StringsEditor текст, отображаемый в поле, представляет собой список введенных строк через запятую. При повторном открытии раскрывающегося списка снова отображаются строки, по одной на строку.

Результатом моей работы на данный момент является то, что все выглядит замечательно во время разработки. Пользователь может изменять свойство, добавляя и удаляя строки в его / ее сердце, и текст, отображаемый в сетке свойств, соответствует содержимому коллекции.

То, что я пока не смог выяснить - и это меня не удивляет - это то, как на самом деле сохранить эту коллекцию за пределами времени проектирования, чтобы введенные значения ... вы знаете, оставайся там . Насколько я понимаю, в настоящее время свойство редактируется во время разработки (мной), но поскольку ни одно из примененных мною изменений не влияет на сгенерированный InitializeComponent метод элемента управления, это не влияет на * 1030. * class Я занимаюсь проектированием (только экземпляр , отображаемый в настоящее время в моей IDE).

Но, очевидно, возможно получить ваши значения в этот вызов InitializeComponent. Фактически, я просто случайно обнаружил, что это волшебным образом «просто работает» для свойств типа DirectoryInfo с соответствующим UITypeEditor (я создал другой редактор с именем DirectoryEditor, который просто отображает FolderBrowserDialog и предоставляет DirectoryInfo объект для любого выбранного пути, и это неожиданно сделал в итоге обновило метод класса InitializeComponent). Так что я знаю, что это можно сделать. Я просто ищу кого-то, чтобы указать мне правильное направление.

...