2011-02-16 45 views

回答

5

是的,它可以使用反射。我爲a factory to create dependency properties for WPF實施了類似的東西。整個源代碼可以找到here

相關的代碼:

// Check all properties for a dependency property attribute. 
const BindingFlags ALL_PROPERTIES = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var matchingProperties = new Dictionary<PropertyInfo, DependencyPropertyAttribute>(); 
foreach (PropertyInfo property in m_ownerType.GetProperties(ALL_PROPERTIES)) 
{ 
    object[] attribute = property.GetCustomAttributes(typeof(DependencyPropertyAttribute), false); 
    if (attribute != null && attribute.Length == 1) 
    { 
     // A correct attribute was found. 
     DependencyPropertyAttribute dependency = (DependencyPropertyAttribute)attribute[ 0 ]; 

     // Check whether the ID corresponds to the ID required for this factory. 
     if (dependency.GetId() is T) 
     { 
      matchingProperties.Add(property, dependency); 
     } 
    } 
} 

同時我已經抽象出抽象類的層次結構中此行爲,因爲我創造a factory to simplify creating view models時沒有類似的東西,但我相信上面的代碼已經回答了你的問題。此抽象「工廠」的源代碼可以是be found here

UPDATE:

要訪問屬性的值,使用PropertyInfo.GetValue()。你當然需要參考你的班級的實例。

+0

謝謝,它可能需要我花一段時間來實現這個,看它是否有效,所以它可能不會被接受,直到明天:) – MrBliz

+0

@ Doozer1979:我添加了一個抽象類,你可以使用。它可能會遺漏一些依賴到我的圖書館,但它可能會讓你開始。 –

相關問題