2013-02-15 1 views
1

Je prévois d'utiliser la liaison de données .NET pour un petit projet, qui est principalement un éditeur de configuration. Ainsi, une collection de paramètres est liée à un formulaire, chargé à partir de app.config au début, et sauvegardée à tout moment (avec invite). Pas de formatage, pas de validation, pas de base de données - configuration très simple. Je ne fais pas confiance. NET pour effectuer des rappels aléatoires, donc prévoyez d'utiliser la mise à jour manuelle avec Binding.WriteValue, afin que l'utilisateur peut appliquer ou rejeter toutes les modifications apportées.Comment WriteValue pour toutes les liaisons

Existe-t-il un objet .NET natif que je peux utiliser pour déclencher WriteValues pour toutes les liaisons? J'ai regardé BindingContext et BindingManagerBase, mais je n'ai pas trouvé un bon exemple de travail sur la façon de les utiliser.

Je sais qu'il y a BindingSource.ResetBindings, ce qui est un équivalent logique à ReadValue (il n'y a pas de membre ReadValue), donc je cherche quelque chose comme ça pour écrire les valeurs.

Je voudrais éviter de passer en revue toutes les commandes de la hiérarchie et d'énumérer chacune de leurs liaisons individuellement.

Répondre

1

Je ne sais pas si vous avez encore besoin d'une réponse à cela, mais c'est ici.

Lambda (Short):

Controls.Cast<Control>().ForEach(control=>control.DataBindings.Cast<Binding>().ForEach(binding=>binding.WriteValue())); 

classique (longue):

foreach (var control in Controls.Cast<Control>()) 
{ 
    foreach (var binding in control.DataBindings.Cast<Binding>()) 
    { 
     binding.WriteValue(); 
    } 
} 

Je ne sais pas combien de contrôles que vous avez sur votre formulaire, mais qui ne peut être avec de bonnes performances . De plus, si vous avez des contrôles imbriqués, vous devez l'appeler récursif.

Affectez mieux les valeurs à l'Istance de la classe que vous affectez à DataSource. Ne l'écrivez pas à la propriété controls, mieux l'écrire dans le magasin de données. Vous pouvez ensuite utiliser la liaison et appeler ResetBindings pour actualiser les valeurs.

+0

Merci pour votre réponse. Je me suis retrouvé avec quelque chose comme ça finalement. Difficile de se souvenir exactement, car le besoin était il y a plus d'un an. Et j'ai aussi changé de travail depuis. :) Quoi qu'il en soit, +1 et acceptant. – Neolisk

Questions connexes