Je me suis battue pour obtenir la liaison de données pour travailler dans WPF pendant un peu plus d'une semaine. J'ai obtenu une aide précieuse en ce qui concerne le DataContext, et j'ai eu la connexion de données pour travailler via DependencyProperties. Pendant que j'apprenais sur la liaison de données, je suis tombé sur de nombreuses discussions à propos du INotifyPropertyChanged
et de la façon dont il est meilleur que les PDD de plusieurs façons. Je me suis dit que j'essaierais et que je l'essayerais. J'utilise la classe ViewModel de base de Josh Smith et mon ViewModel en est dérivé. Cependant, j'ai un peu de mal à obtenir la liaison de données au travail, et j'espère que quelqu'un ici peut me dire où je vais mal. Dans ma classe ViewModel, j'ai un code ObservableCollection<string>
. Dans mon interface graphique, j'ai un combobox qui est lié à cette OC, à savoirLiaison de données avec INotifyPropertyChanged au lieu de DependencyProperties
<ComboBox ItemsSource="{Binding PluginNames}" />
DataContext du GUI est réglé sur le ViewModel, à savoir
private ViewModel _vm;
public GUI()
{
InitializeComponent();
_vm = new ViewModel();
this.DataContext = _vm;
}
et le ViewModel a le OC nommé "PluginNames" :
public class ViewModel
{
public ObservableCollection<string> PluginNames; // this gets instantiated and added to elsewhere
}
Lorsque l'interface graphique est chargée, une méthode est appelée instanciant le CO et ajoute les noms de plug-in à lui. Une fois le CO modifié, j'appelle le RaisePropertyChanged("PluginNames")
. Je m'attendais à ce que le modèle de liaison de données WPF soit conscient de INotifyPropertyChanged, que c'est tout ce que je devais faire et qu'il fonctionnerait "magiquement" et mettrait à jour les éléments combobox avec les plugins chargés ... mais ce n'est pas le cas.
Quelqu'un peut-il s'il vous plaît signaler ce que j'ai mal fait ici? Merci! MISE À JOUR: Je ne sais pas pourquoi, mais maintenant, au lieu de ne pas effectuer de mise à jour apparente, je ne trouve pas la propriété du tout. Je pense que je suis vraiment stupide et qu'il manque une étape importante quelque part.
N'utilisez pas les propriétés automatiques: elles n'élèvent pas l'événement PropertyChanged. – itowlson
tout à fait raison. argh! Je vais aller mieux à ce genre de choses finalement. :) – Dave
Est-ce que le bon SO étiquette ici pour accepter la réponse la plus ancienne correcte? Je suppose que oui. – Dave