обновить коллекцию в propertygrid

сено все. Я использую сетку свойств для добавления или удаления объекта в коллекцию. но когда редактор коллекции закрывается только после обновления сетки. после добавления другого объекта сетка не будет обновляться. коллекция в списке. Я видел много людей с той же проблемой, но без решения. спасибо


person guy    schedule 16.09.2010    source источник


Ответы (2)


Реализуйте интерфейс INotifyCollectionChanged или используйте класс ObservableCollection. см. ссылку

person Srinivas Reddy Thatiparthy    schedule 16.09.2010
comment
Можете ли вы привести мне хороший пример, пожалуйста? - person guy; 16.09.2010

Я понимаю, что очень опаздываю на вечеринку, но вот оно. Я использую этот базовый класс

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;
    }
}

Затем вы просто создаете новый Collectioneditor на основе этого. Он автоматически обновит сетку свойств, когда форма коллекции будет закрыта.

Имейте в виду, однако, что это решение отражается на внутренностях сетки свойств и может быть нарушено в любое время, но я сделал это некоторое время без проблем.

person Steve Medley    schedule 05.11.2015