2010-09-16 5 views
0

hay all. J'utilise la grille de propriétés pour ajouter ou supprimer un objet à une collection. mais lorsque le collectioneditor n'est fermé qu'une fois la grille actualisée. après avoir ajouté un autre objet, la grille ne sera pas actualisée. la collection dans une liste. J'ai vu beaucoup de gens avec le même problème mais aucune solution. thanskrafraîchir une collection dans la grille de propriété

Répondre

0

Mettre en œuvre l'interface INotifyCollectionChanged ou utiliser la classe ObservableCollection. voir le link

+0

pouvez-vous me donner un bel exemple s'il vous plaît ? – guy

1

Je me rends compte que je suis très en retard à la fête, mais voilà. J'utilise cette classe de base

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

Ensuite, vous venez de créer un nouveau Collectioneditor sur cette base. Il actualisera automatiquement la grille de propriétés lorsque le formulaire de collecte est fermé.

Sachez cependant, cette solution reflète dans les entrailles de la grille de la propriété et peut être rompu à tout moment, mais je l'ai fait pendant un certain temps maintenant sans problème

+0

wow, je vous remercie donc mutch! – Henrique

Questions connexes