Что было бы самым простым способом предоставить пользователю способ настроить дерево объектов? - PullRequest
1 голос
/ 11 ноября 2011

Итак, у меня есть дерево объектов, которое выглядит примерно так:

AbstractA
    string PropA
    int PropB
    AbstractC PropC
    AbstractD PropD

AbstractB
    string PropA
    string PropB

AbstractC : AbstractB
    string PropC

AbstractD : AbstractB
    int PropC

ConcreteA1 : AbstractA
    int PropE

ConcreteC1 : AbstractC
    bool PropD

ConcreteC2 : AbscractC
    decimal PropD

ConcreteD1 : AbstractD
    string PropD
ConcreteD2 : AbstractD
    long PropD

Проблема, с которой я сталкиваюсь, заключается в поиске всеобъемлющего способа предоставления пользователю возможности конфигурировать дерево объектов. Есть несколько конкретных классов, которые расширяют мои тезисы, и я хотел бы воздержаться от создания пользовательского элемента управления для каждого конкретного типа. Чтобы добавить дополнительное ограничение в микс, определение класса происходит из моего прокси-класса WCF. Я хотел бы, если это вообще возможно, не использовать свои собственные определения прокси / модели, но если единственный способ достичь моей цели - это сделать это, то пусть будет так.

Изначально я пытался использовать PropertyGrid, но мои знания об этом довольно слабые, и мне не повезло, что я нашел хорошие примеры вчера вечером.

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

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

0 голосов
/ 11 ноября 2011

Чтобы избежать создания элемента управления для каждого типа, вам необходимо использовать отражение в свойствах каждого объекта и преобразовывать данные в простые строки и управлять ими.Элемент управления сеткой с двумя столбцами, слева для имен свойств и справа для их значений (в виде строк).Когда редактирование имеет место, преобразует значение в правильный тип.Каждый базовый тип имеет преобразователь наследования, к которому относительно легко получить доступ.

Ваша сетка / список должен быть списком свойств, и эти свойства должны соответствовать вашему экземпляру класса.Список объектов будет представлять каждое свойство элемента (ваш конкретный объект).В списке объектов необходимо запомнить несколько вещей: элемент, информацию о свойстве свойства и значение, а также все, что вы хотите, чтобы сетка делала на основе информации о свойстве.

Использование Reflection и TypeConverter'sвы можете получить каждое свойство и отредактировать их значения и, следовательно, создать один элемент управления (сетка / список свойств для экземпляра класса) для редактирования любого из ваших классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...