Je tente d'utiliser la fonctionnalité ApplicationSettings de .NET 2.0 pour la première fois et je la trouve un peu... déroutante à certains égards. J'espère que quelqu'un pourra m'aider à comprendre où je me trompe.
J'ai une classe de paramètres génériques que j'ai implémentée qui est une sous-classe de ApplicationSettingsBase. J'ai implémenté une propriété et je l'ai taguée. Cela semble fonctionner.
J'ai ensuite essayé de lier un contrôle listbox à la propriété, et cela semble également fonctionner. Lorsque j'ouvre le formulaire, il charge correctement les propriétés.
Le problème auquel je suis confronté est que si je veux mettre à jour les paramètres et le data binding sans recharger le formulaire, cela ne semble pas fonctionner. Il n'y a pas de méthodes pour rafraîchir la liaison, et d'après ce que je lis, cela devrait se mettre à jour automatiquement (ApplicationSettingsBase implémente IPropertyChangeNotify, auquel les DataBindings devraient s'abonner... mais cela ne semble pas fonctionner). Vous ne pouvez pas non plus mettre à jour manuellement le listbox si vous avez un DataBinding.
Voici mon code :
Settings.cs
public class Settings : ApplicationSettingsBase
{
public Settings()
{
if (FixedBooks == null) FixedBooks = new List();
}
[UserScopedSetting()]
public List FixedBooks
{
get { return (List)this["FixedBooks"]; }
protected set { this["FixedBooks"] = value; }
}
}
SettingsForm.cs
Settings _settings = new Settings();
private void SettingsForm_Load(object sender, EventArgs e)
{
lbFixedColumns.DataBindings.Add(new Binding("DataSource", _settings,
"FixedBooks", false, DataSourceUpdateMode.OnPropertyChanged));
}
private void DoSomething()
{
_settings.FixedBooks.Add("Test");
}
De ce que je comprends, ajouter quelque chose aux ApplicationSettings devrait déclencher IPropertyChangedNotify pour avertir le contrôle de liaison que la propriété a changé et le forcer à se recharger... mais cela ne semble pas se produire.
Qu'est-ce que j'ai oublié ?
EDIT:
Je crois savoir quel est le problème. Le problème est que je modifie le contenu de la collection dans la classe Settings, mais je ne change pas la propriété elle-même (qui est la collection elle-même). Je pense que je devrais réellement ajouter ou supprimer l'ensemble de la collection pour que IPropertyChangedNotify se déclenche, ce qui ne se produit pas.
Je ne suis pas sûr de quelle est la solution à ce problème.