В неком контроле в design time c помощью property editor-а студии можно править колекцию неких итемов. Код за это отвечающий примерно такой:
private System.Collections.Generic.List<SomeType> _SomeTypeItems = new System.Collections.Generic.List<SomeType>();
[
Description("..."),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))
]
public System.Collections.Generic.List<SomeType> SomeTypeItems
{
get
{
return _SomeTypeItems;
}
}
После правки нужно вызвать Invalidate() для отображения изменений. Как это правильно сделать?
Здравствуйте, kr12, Вы писали:
K>После правки нужно вызвать Invalidate() для отображения изменений. Как это правильно сделать?
//...
[RefreshProperties(RefreshProperties.Repaint)]
public System.Collections.Generic.List<SomeType> SomeTypeItems
{
//...
}
Повидимому я нечетко сформулировал задачу: нужно обновить вид не редактора свойств, встроенного в студию, а вид самого контрола, к чему и призывает его метод Invalidate().
С трудом поборол это исспользуя свой CollectionEdior:
class SampleCollectionEditor : System.ComponentModel.Design.CollectionEditor
{
public SampleCollectionEditor(Type type)
: base(type)
{
}
public override bool GetPaintValueSupported(ITypeDescriptorContext context) //или можно перекрыть GetEditStyle..
{
if (base.Context != null) ((Control)base.Context.Instance).Invalidate(); //эта строка
return base.GetPaintValueSupported(context);
}
}
Думаю это не лучший выход. Что посоветуете?