I get solution in this situation.
There is a need to derive from CollectionEditor class and make custom editor like this:
public class MeasuredParamEditor : CollectionEditor
{
public static EventHandler CollectionChanged;
public MeasuredParamEditor(Type type)
: base(type)
{ }
protected override string GetDisplayText(object value)
{
if (value is MeasuredParam)
{
MeasuredParam param = (MeasuredParam)value;
return string.Format("{0}: {1}", param.Name, param.Value);
}
else return base.GetDisplayText(value);
}
protected override CollectionForm CreateCollectionForm()
{
CollectionForm collectionForm = base.CreateCollectionForm();
Form frm = collectionForm as Form;
if (frm != null)
{
// Get OK button of the Collection Editor...
Button button = frm.AcceptButton as Button;
// Handle click event of the button
button.Click += new EventHandler(OnCollectionChanged);
}
return collectionForm;
}
void OnCollectionChanged(object sender, EventArgs e)
{
if (CollectionChanged != null)
{
CollectionChanged(sender, e);
}
}
}
In main form I subscribe to static event of my custom editor.
private void MainForm_Load(object sender, EventArgs e)
{
MeasuredParamEditor.CollectionChanged += new EventHandler(OnMeasuredParamsChanged);
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
MeasuredParamEditor.CollectionChanged -= new EventHandler(OnMeasuredParamsChanged);
}
void OnMeasuredParamsChanged(object sender, EventArgs e)
{
this.myPropGrid.Refresh();
}
Regards, Artem