2012-05-21 2 views
4

Итак, для этого проекта, над которым я работаю, мы решили использовать элемент управления .NET PropertyGrid. Свойство propertygrid заполняется объектом, который создается во время выполнения, исходя из того, какой элемент выбран пользователем в элементе управления ListView.Свойства Dynamic PropertyGrid

Итак, если они выбирают первый элемент в ListView, такой как «Base», PropertyGrid покажет свойства для этого компонента, такие как его размеры. Затем они выбирают «Top», и он отображает цвет в PropertyGrid. В любом случае каждый элемент в списке - это один «компонентный» объект.

В принципе, когда выбран элемент ListView, цикл выполняет итерацию через набор данных, чтобы определить, какие свойства связаны с выбранным компонентом объекта, а затем попадает в класс propertybag, который отображается в PropertyGrid.

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

Я использую Visual Studios 2010/C# .NET, а для генерации динамических свойств я использую явно популярный класс «Property Bag», который я нашел в CodeProject от Tony Allowatt. Единственное, о чем я могу думать, это добавить дополнительный столбец в базу данных для свойств и использовать это, чтобы сообщить PropertyBag, какой тип данных нужно добавить? Это, кажется, популярная тема, но мне трудно понять, как это сделать в сочетании с динамически построенным объектом.

ответ

6

Это не ответ, но я тоже работал над созданием такого зверя. Вот суперхитов StackOverflow по этой теме ...

How to modify PropertyGrid at runtime (add/remove property and dynamic types/enums)

How to display a dynamic object in property grid?

PropertyGrid and Dynamic Types of Objects

В первый я, хотя я на самом деле необходимых динамических объектов на основе объекта Expando, для меня получается не так. Возможно, вы захотите, чтобы вы не попали в эту ловушку.

В моем случае я действительно нуждался в коллекции пользовательских объектов, которые могут иметь переменный набор свойств, добавленных к ним. Где каждое свойство является экземпляром одного из трех пользовательских типов (stringType, rangeType или enumType). Как только я понял, что «динамические» свойства не будут иметь произвольные типы классов, проект стал легко поворотным в коде, обсуждаемом в трех примерах stackoverflow. С вопросом How to modify PropertyGrid at runtime (add/remove property and dynamic types/enums) - это почти прямой пример того, чем я заканчиваю.

Надеюсь мои Ramblings помочь вам найти свой путь ...

Кит

+0

Любая идея, как это может быть использовано для WPF Xceed недвижимость? Я пробовал код и не совместим – user1035217

0

Я считаю, что this link предоставит вам приличном вход, чтобы решить вашу проблему. Hpe это помогает.

Редактировать включить содержимое Линка:

Декларация динамических свойств:

dynamic employee = new BusinessObject(); 
employee.FirstName = "John"; 
employee.LastName = "Doe"; 

класс, который поддерживает динамические свойства:

public class BusinessObject : DynamicObject 
{ 
    private readonly IDictionary<string, object> dynamicProperties = 
     new Dictionary<string, object>(); 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
      var memberName = binder.Name; 
      return dynamicProperties.TryGetValue(memberName, out result); 
    } 

    public override bool TrySetMember(SetMemberBinder binder, object value) 
    { 
      var memberName = binder.Name; 
      dynamicProperties[memberName] = value; 
      return true; 
    } 
} 
Смежные вопросы