感谢您抽出宝贵时间来研究这个问题。
我有以下代码:
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的一种非常简单的方法。
我的问题是:“如何为每个DynamicProperty设置CategoryAttribute,以便它们可以在PropertyGrid中进行分组?”
我打算有第三个列表,其中包含词典中每个项目的类别信息。
谷歌搜索几个小时后,似乎只有在设计时创建的类的编译时才会这样做。但是我怀疑必须有一种方法可以为动态创建的对象/属性执行此操作。
感谢任何帮助!
答案 0 :(得分:0)
看起来这可能就像我来弄清楚它一样。回答我自己的问题以供参考。