2009-10-20 9 views
0

Cela sera probablement évident, mais je ne peux pas trouver le meilleur moyen.WPF: Liaison avec paramètre non statique? (newbie question)

Je souhaite afficher les tâches de l'utilisateur dans une zone de liste. Ces tâches sont dans la base de données et se composent d'un ID, UserId et description.

L'utilisateur s'est connecté à l'application.

Comment puis-je récupérer les tâches pour cet userId et le configurer pour la liaison à la liste?

J'essayais avec un ObjectDataProvider mais je n'arrive pas à comprendre comment l'utiliser en combinaison avec des trucs non statiques (comme mon _dbService, userId, language, ...).

Est-ce que les seules options pour rendre toutes ces choses statiques contre la liaison dans le code derrière?

Si oui, cela signifie que ObjectDataProvider n'est pas très utile, non? Je trouve beaucoup d'exemples de ce qui est utilisé avec un paramètre codé en dur, mais je ne vois guère de situation où j'ai besoin d'une telle fonctionnalité ..

Répondre

2

Je fais tout mon WPF en utilisant le modèle Model-View-ViewModel. Je vous ai donné un lien là-bas, mais Google vous donnera des charges. MVVM semble être le modèle standard pour WPF. This project est probablement plus compliqué que ce dont vous avez besoin, mais il est bien écrit et apporte à la maison l'utilisation de MVVM.

Fondamentalement, vous créez un modèle de vos données. Dans ce cas, vous créerez probablement une classe simple (je l'appellerai ToDoItem) avec les propriétés Id, UserID et Description. Utilisez votre mécanisme préféré pour obtenir une collection de ceux-ci à partir de la base de données. Lien vers SQL, Entity Framework, une requête standard, peu importe.

Ensuite, vous avez votre ViewModel - vous avez une instance du ViewModel pour chaque instance du Modèle: la VM a une référence aux propriétés M et 'forward'. Le ViewModel est ce que vous utilisez pour manipuler le modèle.

Ensuite, vous avez votre View - c'est l'interface utilisateur. Vous définissez le DataContext de la vue pour être le ViewModel, puis vos liaisons se lient automatiquement à ViewModel. Votre vue finit juste par être les choses que vous pouvez voir. Tout le travail se fait dans le ViewModel. Cela signifie que c'est très facile à tester. Ainsi, lorsque vous cliquez sur un bouton dans votre vue, les liaisons le transmettent à une commande dans votre ViewModel qui manipule le modèle.

L'interface utilisateur est également une vue avec un ViewModel. Votre machine virtuelle d'interface utilisateur peut donc charger une collection de modèles à partir de la base de données et les coller dans une ObservableCollection. La collection d'éléments ListBox serait liée à cette ObservableCollection.

Il est difficile d'expliquer tout cela dans un article comme celui-ci. Lisez quelques articles et voyez ce que vous en pensez. Je suis encore tout à fait nouveau à ce sujet, mais je crois que ma lecture sur MVVM a porté ses fruits.

+0

thx, passera probablement à cette –

0

Hela Thomas, Tom ici de Orbit One :)

MVVM est le chemin à parcourir. Je suis sur mon 4ème projet et WPF brille vraiment si vous utilisez mvvm. Vous avez déjà essayé MVC (ou MVP comme nous l'avons fait sur recy * tire) et c'est une belle séparation de souci. MVVM va encore plus loin puisque le viewmodel ne sait absolument rien de la vue.

La vue se lie au viewmodel, donc elle a une référence à elle (bidirectionnelle, super puissante et fonctionne au-delà de la démo MS typique). Le viewmodel est juste un poco et est une représentation de votre vue, data + comportement. Une fois que vous creusez ce paragraphe, le terme cool mvvm n'aura aucun secret.

Je vois si je peux créer une petite démo. Peut-être aurai-je le temps plus tard. Ce que je vais proposer est une vue (xaml, fichier 1) qui se lie à un modèle de vue (fichier 2, une classe poco, à ne pas confondre avec le code derrière). Le modèle peut être ce que vous voulez (couche de service ou directement dans les dépôts). En utilisant la puissance de la liaison bidirectionnelle, nous lierons à une collection observable, ce qui signifie que si nous ajoutons/supprimons/... quelque chose à la collection, la vue la récupèrera sans que nous y mettions de l'énergie.

Mes premiers projets de 2 wpf ont été réalisés avec Caliburn Micro (voir codeplex) qui est un framework puissant basé sur des conventions. Il vous protège du wpf hardcore (créant vous-même des propriétés de dépendances tour) et vous permet de créer quelque chose de relativement rapide sans vraiment comprendre wpf. C'est un inconvénient de lui-même, mais cela a fonctionné pour moi. A partir du projet 3 j'ai commencé à apprivoiser ces propriétés de dépendance moi-même et cela fera de vous un meilleur développeur wpf.

Je vois que la question est d'octobre .. avez-vous trouvé une bonne solution?