日期:2014-05-17  浏览次数:21263 次

PropertyGrid 触发 PropertyValueChanged 的问题
在使用 PropertyValueChanged  的时候,我自定义的 UITypeEditor 弹出控件无法触发这个事件,其他的 string bool 等都是可以的。

        public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
        {
            // 编辑属性值时,在右侧显示...更多按钮  
            return UITypeEditorEditStyle.Modal;
        }

        public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
        {
            var edSvc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
            if (edSvc != null)
            {
                QueryParam box = new QueryParam((List<ParameterList>)value);
                edSvc.ShowDialog(box);
                value = box.Parameter;
            }
            return base.EditValue(context, provider, value);
        }


请问怎么才可以让一些 UITypeEditor 触发到事件,执行的弹出后类值是改变的.

------解决方案--------------------
如果是引用类型,要改变引用,比如:

//
List<ParameterList> list = value;
list.Add(...);
value = list;   // 引用没有改变,不会触发
return value;
//
List<ParameterList> list = value;
list.Add(...);
value = new List<ParameterList>(list)  // 改变引用
return value;