私は自分のアプリケーションでPropertyGridを使用しています。実行時にカスタムデータの条件で可視性と読み取り専用プロパティを変更する必要がありました。プロパティのgetが呼び出されたときに発生するイベントを検索する
私はそれの準備ができて&簡単な何かを見つけることができませんでしたが、私は次のように実行時にReadOnlyAttribute
とBrowsableAttribute
プロパティを変更することで回避策が見つかりました:今
protected void SetBrowsable(string propertyName, bool value)
{
PropertyDescriptor property = TypeDescriptor.GetProperties(GetType())[propertyName];
BrowsableAttribute att = (BrowsableAttribute)property.Attributes[typeof(BrowsableAttribute)];
FieldInfo cat = att.GetType().GetField("browsable", BindingFlags.NonPublic | BindingFlags.Instance);
if (property.Attributes.Cast<Attribute>().Any(p => p.GetType() == typeof(BrowsableAttribute)))
cat.SetValue(att, value);
}
protected void SetReadOnly(string propertyName, bool value)
{
PropertyDescriptor property = TypeDescriptor.GetProperties(GetType())[propertyName];
ReadOnlyAttribute att = (ReadOnlyAttribute)property.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo cat = att.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
if (property.Attributes.Cast<Attribute>().Any(p => p.GetType() == typeof(ReadOnlyAttribute)))
cat.SetValue(att, value);
}
、私の問題は、どこがすべきですこれらのメソッドを呼び出しますか?これらのメソッドを呼び出すためにobject
が処理できるイベントはありますか?たぶんインタフェースを実装することによって。