refresh a collection in propertygrid

前端 未结 2 1460
闹比i
闹比i 2021-01-29 02:31

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

相关标签:
2条回答
  • 2021-01-29 03:04

    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

    0 讨论(0)
  • 2021-01-29 03:14

    Implement INotifyCollectionChanged interface or use ObservableCollection class. see the link

    0 讨论(0)
提交回复
热议问题