Скажем, у меня есть свойство Foo
типа SomeType
в классе типа SomeClass
, которое редактируется с помощью пользовательского редактора SomeTypeEditor
:
[EditorAttribute(typeof(SomeTypeEditor), ...)]
public SomeType Foo
{
get
{
return BuildFooFromInternalRepresenation();
}
set
{
UpdateInternalRepresentation(value);
}
}
Функция SomeTypeEditor.EditValue
выглядитчто-то вроде этого:
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (null == edSvc)
{
return null;
}
var form = new SomeTypeEditorForm(value as SomeType);
if (DialogResult.OK == edSvc.ShowDialog(form))
{
var someClass = context.Instance as SomeClass;
someClass.Foo = form.Result;
return someClass.Foo;
}
else
{
return value;
}
}
Теперь я хотел бы добавить еще одно свойство Baz
, также типа SomeType
, к SomeClass
.Я хотел бы изменить это свойство SomeTypeEditor
, но строка
someClass.Foo = form.Result;
в EditValue
связывает SomeTypeEditor
с этим конкретным свойством.Было бы достаточно просто сделать копию SomeTypeEditor
, которая вместо этого редактирует Baz
, но я бы хотел избежать этого, если это возможно.В любом случае, можно ли сделать мой SomeTypeEditor
универсальным (в любом смысле этого слова), чтобы его можно было использовать для редактирования Foo
и Baz
?