| File: System\ComponentModel\DataAnnotations\MetadataPropertyDescriptorWrapper.cs | Web Access |
| Project: src\runtime\src\libraries\System.ComponentModel.Annotations\src\System.ComponentModel.Annotations.csproj (System.ComponentModel.Annotations) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace System.ComponentModel.DataAnnotations { internal sealed class MetadataPropertyDescriptorWrapper : PropertyDescriptor { private readonly PropertyDescriptor _descriptor; private readonly bool _isReadOnly; public MetadataPropertyDescriptorWrapper(PropertyDescriptor descriptor, Attribute[] newAttributes) : base(descriptor, newAttributes) { _descriptor = descriptor; foreach (Attribute attribute in newAttributes) { if (attribute is ReadOnlyAttribute readOnlyAttribute) { _isReadOnly = readOnlyAttribute.IsReadOnly; break; } } } public override void AddValueChanged(object component, EventHandler handler) { _descriptor.AddValueChanged(component, handler); } public override bool CanResetValue(object component) { return _descriptor.CanResetValue(component); } public override Type ComponentType { get { return _descriptor.ComponentType; } } public override object? GetValue(object? component) { return _descriptor.GetValue(component); } public override bool IsReadOnly { get { // Dev10 Bug 594083 // It's not enough to call the wrapped _descriptor because it does not know anything about // new attributes passed into the constructor of this class. return _isReadOnly || _descriptor.IsReadOnly; } } public override Type PropertyType { get { return _descriptor.PropertyType; } } public override void RemoveValueChanged(object component, EventHandler handler) { _descriptor.RemoveValueChanged(component, handler); } public override void ResetValue(object component) { _descriptor.ResetValue(component); } public override void SetValue(object? component, object? value) { _descriptor.SetValue(component, value); } public override bool ShouldSerializeValue(object component) { return _descriptor.ShouldSerializeValue(component); } public override bool SupportsChangeEvents { get { return _descriptor.SupportsChangeEvents; } } } }