在从编辑器获取返回值的时候,如果是引用对象,不要只改变value的成员:
object  EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
    (value as List<int>)[0] = 123;             // wrong.
    return value;
    List<int> result = new List<int>;          // correct
    result.AddRange( value as List<int> );
    result[0] = 123;
    return result;  
}
而是要返回一个新的对象。后面一种情况将触发PropertyValueChanged事件。
看来PropertyGrid根据简单的引用相等来判断属性是否改变。