2010-11-18 8 views
1

J'ai une application WPF qui est actuellement entièrement pilotée par XAML. Tous les champs, datagrids tout sont liés à partir de XAML en utilisant des objets ObjectDataProviders. J'ai un DataAccessLayer (DAL) importé dans le projet. Les appels pour récupérer des données en utilisant les ODP sont utilisés pour afficher les données fonctionnent tous.Mettre à jour la base de données directement à partir de XAML

Est-il possible d'effectuer des insertions, des mises à jour, des suppressions en utilisant les méthodes qui existent dans ma DAL directement à partir du XAML? J'essaie d'éviter tout code-behind ici pour garder l'interface utilisateur une entité distincte. Je ne trouve pas d'exemples de coupes claires avec insertion, mise à jour, suppression sur ceci. Des pensées?

Répondre

2

Ni WPF ni Xaml n'ont vraiment de concept d'insertion, de mise à jour et de suppression. La liaison de données concerne tous les objets (ou XML occasionnel). Une fois que les modifications dans l'interface utilisateur (par exemple, l'utilisateur saisissant une valeur dans un TextBox) ont été poussées dans les objets liés, le travail de liaison de données est terminé. C'est à vous de décider ce que vous allez faire avec les données.

Ce n'est pas un obstacle à l'objectif «pas de code derrière». L'approche habituelle consiste à ajouter une couche entre votre vue (Xaml) et vos objets de données, et à lier l'interface utilisateur à cette couche plutôt que le modèle de domaine sous-jacent. (Ce calque est souvent appelé ViewModel, mais vous le verrez également par d'autres noms tels que Presenter.) Ce modèle global est appelé "présentation séparée".)

La façon dont vous activez les actions sans nécessiter de code behind est à travers l'utilisation de commandes. Votre couche intermédiaire n'expose pas uniquement les propriétés orientées données. Il peut exposer les propriétés qui contiennent des commandes et vous pouvez lier ces commandes à des boutons, des liens hypertexte ou des éléments de menu. Cela ne nécessite aucune codebehind - tout est juste des expressions de liaison dans le Xaml. Mais lorsque vous cliquez sur le bouton, le code du gestionnaire approprié dans votre viewmodel s'exécute. (ICommand est une interface très simple à mettre en œuvre -. Un bouton suffit d'appeler la méthode Execute lorsque vous cliquez dessus et vous ne fournissez normalement votre propre mise en œuvre - le haut-RoutedCommand et RoutedUICommand ne conviennent pas à ce scénario.)

Et puis vous pouvez insérer/mettre à jour/supprimer/tout ce que vous voulez.