Как указать атрибут CategoryAttribute для DynamicProperty, созданного с помощью динамических выражений LINQ?

Спасибо, что нашли время взглянуть на этот вопрос.

У меня есть следующий код:

    public partial class TemplateEditor : Form {
    private object dynamicObject;
    private Type dynamicType;
    private Dictionary<string, string> properties;
    public TemplateEditor() {
        InitializeComponent();
        properties = new Dictionary<string, string> {{ "Name 1", "Value 1" },
                                                     { "Name 2", "2nd Thing" },
                                                     { "Name 3", "Third" }};
        var dynamicProperties = new List<DynamicProperty>();

        foreach (KeyValuePair<string, string> pair in properties) {
            dynamicProperties.Add(new DynamicProperty(pair.Key, typeof(string)));
        }
        dynamicType = DynamicExpression.CreateClass(dynamicProperties);
        dynamicObject = Activator.CreateInstance(dynamicType);
        propertyGrid.SelectedObject = dynamicObject;

        foreach (KeyValuePair<string, string> pair in properties) {
            dynamicType.GetProperty(pair.Key).SetValue(propertyGrid.SelectedObject, pair.Value, null);
        }
    }
    private void CopyDynamicObjectValuesToDictionary() {
        var updatedTemplateProperties = new Dictionary<string, string>();

        foreach (KeyValuePair<string, string> pair in properties) {
            string value = (string)dynamicType.GetProperty(pair.Key).GetValue(propertyGrid.SelectedObject, null);
            updatedTemplateProperties.Add(pair.Key, value);
        }
        properties = updatedTemplateProperties;
        // Display Updated Dictionary
        foreach (KeyValuePair<string, string> pair in properties) {
            textBox1.AppendText(pair.Key);
            textBox1.AppendText(": \"");
            textBox1.AppendText(pair.Value);
            textBox1.AppendText("\" of type ");
            textBox1.AppendText(typeof(string).ToString());
            textBox1.AppendText(Environment.NewLine);
        }
        textBox1.AppendText(Environment.NewLine);
    }
    private void OnShowValuesButtonClick (object sender, EventArgs e) {
        CopyDynamicObjectValuesToDictionary();
    }
}

Который я использую для отображения редактируемого словаря в PropertyGrid. Он основан на этой статье: http://consultingblogs.emc.com/howardvanrooijen/archive/2009/03/02/reduce-propertygrid-development-pain-by-using-linq-dynamic-expressions.aspx

Мне нравится эта техника, потому что это довольно простой способ получить динамические данные в PropertyGrid.

Мой вопрос: "Как я могу установить атрибут CategoryAttribute для каждого DynamicProperty, чтобы их можно было сгруппировать в PropertyGrid?"

Я намерен иметь третий список, который содержит информацию о категории для каждого элемента в словаре.

Кажется, что после нескольких часов поиска в Google это нужно делать только во время компиляции для классов, созданных во время разработки. Однако я подозреваю, что должен быть способ сделать это для динамически создаваемых объектов / свойств.

Любая помощь приветствуется!

1 ответ

Ну, похоже, это может быть настолько близко, насколько я понимаю. Отвечая на мой вопрос для справки.

http://www.codeproject.com/Messages/1016749/Re-nice.aspx

Другие вопросы по тегам