2014-06-27 52 views
0

屬性添加到C#類我創造了我的PropertyGrid控制類,這看起來是這樣的:如何在運行時

public class DetailFilterProperties 
{ 
    public DetailFilterProperties(TreeViewEventArgs e) 
    { 
       ... 
    } 

    [CategoryAttribute("Base"), DescriptionAttribute("Filtered fields referring to a formatted yam field"), ReadOnly(true)] 
    public Dictionary<String, String> FilteredFields 
    { 
     get; 
     set; 
    } 

    ... 
} 

在運行時我想添加一個字符串屬性(或字符串列表)給我的班,任何人都可以給我一個如何做到這一點的例子。

我瀏覽網頁並閱讀了關於ExpandoObject,但我敢打賭有一個更簡單的方法來實現這一點,我只是沒有找到一個例子呢。

感謝您的幫助提前。

+0

是否有可能在該問題使用動態對象你正在努力解決? –

回答

1

實際上你不能在運行時將屬性添加到C#類中;但是,PropertyGrid通常通過ICustomTypeDescriptor尊重靈活類型。您可以通過直接實現該接口(大量工作)或註冊TypeDescriptionProvider(還有許多工作)來提供自定義類型描述符。無論哪種情況,您都必須實施自定義PropertyDescriptor,並考慮數據的某處。

0

你可以做什麼是重用我的答案上所以這裏所描述的這個問題DynamicTypeDescriptor類:PropertyGrid Browsable not found for entity framework created property, how to find it?

這樣的:

... 
    MyDynamicClass c = new MyDynamicClass(); 
    c.MyStaticProperty = "hello"; 

    // build an object "type" from the original one 
    DynamicTypeDescriptor dt = new DynamicTypeDescriptor(typeof(MyDynamicClass)); 

    // get a wrapped instance 
    DynamicTypeDescriptor c2 = dt.FromComponent(c); 

    // add a property named "MyDynamicProperty" of Int32 type, initial value is 1234 
    c2.Properties.Add(new DynamicTypeDescriptor.DynamicProperty(dt, typeof(int), 1234, "MyDynamicProperty", null)); 

    propertyGrid1.SelectedObject = c2; 
    ... 

    // the class you want to "modify" 
    public class MyDynamicClass 
    { 
     public string MyStaticProperty { get; set; } 
    }