Спасибо, что нашли время взглянуть на этот вопрос.
У меня есть следующий код:
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.
Мой вопрос: «Как я могу установитьАтрибут Category для каждого DynamicProperty, чтобы их можно было сгруппировать в PropertyGrid? "
Я намереваюсь иметь третий список, который содержит информацию о категории для каждого элемента в Словаре.
После поиска в Google длячасы, кажется, это нужно делать только во время компиляции для классов, созданных во время разработки.Однако я подозреваю, что должен быть способ сделать это для динамически создаваемых объектов / свойств.
Любая помощь приветствуется!