![Avatar](https://secure.gravatar.com/avatar/c09d4289a2029a92d72eb28975bba076.jpg?s=64&d=identicon&r=g)
The above solution was correct. Our issue was resolved with the following two classes.
internal sealed class ReadOnlyMergedPropertyDataAccessorFactory : TypeDescriptorFactory
{
protected override IPropertyDataAccessor CreateMergedPropertyDataAccessor(
IPropertyDataAccessor parent,
IList<IPropertyDataAccessor> propertyDataAccessors)
{
return new ReadOnlyMergedPropertyDataAccessor(parent, propertyDataAccessors);
}
}
internal sealed class ReadOnlyMergedPropertyDataAccessor : MergedPropertyDataAccessor
{
private bool isReadOnly;
public ReadOnlyMergedPropertyDataAccessor(IList<IPropertyDataAccessor> propertyDataAccessors)
: base(propertyDataAccessors)
{
this.SetReadOnly(propertyDataAccessors);
}
public ReadOnlyMergedPropertyDataAccessor(IPropertyDataAccessor parent, IList<IPropertyDataAccessor> propertyDataAccessors)
: base(parent, propertyDataAccessors)
{
this.SetReadOnly(propertyDataAccessors);
}
public override bool IsReadOnly
{
get { return this.isReadOnly; }
}
private void SetReadOnly(IList<IPropertyDataAccessor> propertyDataAccessors)
{
switch (propertyDataAccessors[0].ValueName)
{
case "DisplayName":
case "Name":
{
this.isReadOnly = true;
break;
}
}
}
}