2009-04-18 4 views
1

J'ai une page WPF qui contient une zone de liste et une image. Le cadre contient différentes pages chargées par la sélection dans la zone de liste.Cadre WPF accédant aux contrôles de page parente

Chaque page dans le cadre possède une variété de zones de saisie différentes et dispose d'un bouton Enregistrer Annuler. Lorsque vous cliquez sur le bouton Enregistrer, le contenu doit être enregistré dans la base de données et la zone de liste dans la page parent doit être actualisée pour refléter les nouvelles données.

L'enregistrement des données est facile, mais comment puis-je initier une actualisation sur le contenu de la zone de liste dans la page parent lors de l'appel à partir de la page à l'intérieur du cadre?

Je dois d'une manière ou d'une autre être en mesure d'accéder aux commandes des pages parent pour ce faire.

Des idées?

Répondre

3

Il est techniquement possible d'accéder au contrôle parent et de suivre les contrôles qu'il contient, mais cela rend le code très difficile à maintenir car si vous changez la structure du contrôle parent, vous cassez du code dans toutes les pages contenues. Cela serait considéré comme un design très étroitement couplé et c'est souvent fragile. Une conception de nettoyeur Somehwat consisterait à demander à vos classes de page de déclencher un événement lorsque vous appuyez sur le bouton Enregistrer. Ensuite, le cadre parent peut couler l'événement et actualiser tout ce qu'il sait avoir besoin d'être actualisé après une opération de sauvegarde. C'est plus facile à maintenir parce que vos composants sont plus faiblement couplés, mais cela apporte encore beaucoup de connaissances en base de données dans vos composants graphiques. Une telle conception pourrait convenir à une application relativement simple sur laquelle vous ne prévoyez pas faire beaucoup de maintenance ou d'améliorations futures. Le modèle de conception que je préfère (comme de nombreux développeurs) consiste à isoler la gestion de la base de données et la logique métier dans une ou plusieurs classes avec une interface de programmation simple qui peut être testée facilement. Les composants GUI sont aussi simples et minces que possible, de sorte qu'ils peuvent être facilement modifiés si nécessaire. Ceci est souvent appelé un modèle Model-View-Controller mais il y a d'autres noms pour cela. Dans votre exemple, la classe "controller" qui encapsule votre logique métier aurait des propriétés et des méthodes pour lire et définir des informations, et une méthode "Save" ou "Commit" qui écrit les modifications dans une base de données. Une fois l'enregistrement terminé, un événement "Saved" ou "Changed" est signalé à tous les contrôles ("views") affichant les informations modifiées et actualisés en fonction des nouvelles valeurs des propriétés de la classe de contrôleur. .

+0

Merci Jay, c'est une approche intéressante. J'utilise des objets métier avec une couche d'accès aux données, donc je peux peut-être initier l'actualisation à partir de là. J'avais espéré cependant que WPF offrirait un moyen facile d'accéder aux contrôles parentaux mais peut-être que je suis trop optimiste! – Mitch

Questions connexes