2
比方說,我有一個自定義DataAnnotation屬性多個屬性:是否有可能通過具有特定DataAnnotation和特定值的屬性進行循環? .NET C#
[Objective].
我只想把我的viewmodel中有「Y」的價值,並與一個屬性裝飾紀錄[目標]
這種事情可能嗎?
比方說,我有一個自定義DataAnnotation屬性多個屬性:是否有可能通過具有特定DataAnnotation和特定值的屬性進行循環? .NET C#
[Objective].
我只想把我的viewmodel中有「Y」的價值,並與一個屬性裝飾紀錄[目標]
這種事情可能嗎?
是的,它可以使用反射。我爲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()。你當然需要參考你的班級的實例。
謝謝,它可能需要我花一段時間來實現這個,看它是否有效,所以它可能不會被接受,直到明天:) – MrBliz
@ Doozer1979:我添加了一個抽象類,你可以使用。它可能會遺漏一些依賴到我的圖書館,但它可能會讓你開始。 –