2009-08-14 5 views
1

J'essaie de trouver un bon moyen d'implémenter MVP dans les Winforms classiques, et quelques solutions que j'ai trouvées (eg http://codebetter.com/blogs/jeremy.miller/archive/2007/05/25/build-you-own-cab-part-3-the-supervising-controller-pattern.aspx) parlent d'utiliser la liaison de données entre le modèle et la vue. Je n'ai jamais utilisé de liaison de données auparavant, alors j'ai décidé de l'essayer. Le problème est, je ne peux pas trouver comment faire une liaison simple (par exemple une chaîne dans ma classe de modèle à une zone de texte sur le formulaire) en utilisant INotifyPropertyChanged, comme suggéré dans l'article ci-dessus. Je pensais que je l'avais élaboré (ce qui est sous la forme, où « modèle » est une instance de ma classe de modèle):Liaison de données utilisant INotifyPropertyChanged (.Net)

txtModelName.DataBindings.Add(new Binding("Text", model, "Name")); 

Cependant, je me suis vite rendu compte que cela n'a pas utilisé INotifyPropertyChanged du tout - il fonctionne bien si j'implémente cette interface sur mon modèle ou non. Pas un problème en soi, mais cela ne fonctionne pas comme je le veux, le principal problème étant que c'est une liaison bidirectionnelle (je veux seulement lier de l'objet à le formulaire). Je suppose qu'il y a une manière différente de lier using INotifyPropertyChanged, ou que la liaison faite comme ci-dessus peut être réglée pour travailler seulement dans une direction - quelqu'un peut-il m'aider ici, ou pointer vers un exemple décent? J'utilise .Net 3.5 avec des winforms classiques, pas WPF.

Merci

Répondre

1

Comme il se trouve, la situation était un peu au-dessus d'un hareng saur. Ce qui se passait, c'était que je liai une zone de texte au modèle, et du modèle à une autre zone de texte. Si je mettais à jour le modèle directement, cela ne fonctionnerait pas sans implémenter INotifyPropertyChanged. En ce qui concerne la liaison bidirectionnelle, je pense que vous devez simplement vivre avec cela si vous utilisez cette méthode. Si vous ne le voulez pas, il vous suffit de mordre la balle et d'utiliser le style MVP «Passive View».

Questions connexes