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