2
のは、私はのカスタムDataAnnotation属性を持つ複数のプロパティを持っているとしましょう:特定のDataAnnotationと特定の値を持つプロパティをループすることはできますか? .NETのC#
[Objective].
私は唯一の属性が飾られています「Y」の値を持っているし、私のviewmodel内のレコードを入れたい
[目的]
このようなことは可能ですか?
のは、私はのカスタムDataAnnotation属性を持つ複数のプロパティを持っているとしましょう:特定のDataAnnotationと特定の値を持つプロパティをループすることはできますか? .NETのC#
[Objective].
私は唯一の属性が飾られています「Y」の値を持っているし、私のviewmodel内のレコードを入れたい
[目的]
このようなことは可能ですか?
はい、反射を使用することは可能です。私はa factory to create dependency properties for WPFのために同様のものを実装しました。ソースコード全体はhereです。
コードの関連作品は:a factory to simplify creating view modelsを作成するときに、私は似た何かをしたので
// 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);
}
}
}
一方私はすでに、抽象クラスの階層でこの動作を抽象化したが、私は上記のコードは、すでにあなたの質問に答えると信じています。この抽象的な 'factory'のソースコードはbe found hereです。
UPDATE:
PropertyInfo.GetValue()を使用し、プロパティの値にアクセスします。あなたは、あなたのクラスのインスタンスへの参照が必要です。
ありがとう、それが動作するかどうかを確認するためにこれを実装するには時間がかかるかもしれないので、明日まで受け入れられないかもしれません:) – MrBliz
@ Doozer1979:使用できる抽象クラスを追加しました。私のライブラリにいくつかの依存関係が見当たらないかもしれませんが、あなたが始めるかもしれません。 –