refresh a collection in propertygrid

这一生的挚爱 提交于 2020-01-22 03:07:27

问题


hay all. i am using property grid to add or remove an object to a collection. but when the collectioneditor is closed only once the grid refreshes. after adding another object the grid wont get refresh. the collection in a list. i have seen many people with the same problem but no solutions. thansk


回答1:


Implement INotifyCollectionChanged interface or use ObservableCollection class. see the link




回答2:


I realise i am very late to the party, but here it goes. I use this base class

public class CollectionEditorBase : CollectionEditor
{
    protected PropertyGrid ownerGrid;

    public CollectionEditorBase(Type type) : base(type) { }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        PropertyInfo ownerGridProperty = provider.GetType().GetProperty("OwnerGrid", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        ownerGrid = (PropertyGrid)ownerGridProperty.GetValue(provider);

        return base.EditValue(context, provider, value);
    }

    protected override CollectionForm CreateCollectionForm()
    {
        CollectionForm cf = base.CreateCollectionForm();
        cf.FormClosing += delegate(object sender, FormClosingEventArgs e)
        {
            ownerGrid.Refresh();
        };

        return cf;
    }
}

Then you just create a new Collectioneditor based on that. It will automatically refresh the property grid when the collection form is closed.

Be aware though, this solution is reflecting into the internals of the property grid and can be broken at any time, but i have done this for a while now with no problem



来源:https://stackoverflow.com/questions/3727099/refresh-a-collection-in-propertygrid

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!