Как указать атрибут 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 ответ
Ну, похоже, это может быть настолько близко, насколько я понимаю. Отвечая на мой вопрос для справки.