次のようなローカライズされた属性に問題があります。
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
public LocalizedDisplayNameAttribute(string resourceId)
: base(GetMessageFromResource(resourceId))
{ }
private static string GetMessageFromResource(string resourceId)
{
var propertyInfo = typeof(Lockit).GetProperty(resourceId, BindingFlags.Static | BindingFlags.Public);
return (string)propertyInfo.GetValue(null, null);
}
}
この属性を持つプロパティを使用すると、PropertyGrid でローカライズされますが、現在の CultureInfo を変更すると、この PropertyGrid を再度作成しても更新されません。この属性を次の方法で手動で呼び出そうとしました。
foreach (PropertyInfo propertyInfo in myPropertiesInfoTab)
{
object[] custom_attributes = propertyInfo.GetCustomAttributes(false);
}
プロパティ コンストラクターが呼び出されますが、新しく作成された PropertyGrid には、古いカルチャ表示名のプロパティがまだ含まれています (常に最初に作成された値と同じ値)。
アプリケーションを再起動すると機能しますが、これはしたくありません。解決策はありますか?