2009-05-17 8 views
1

J'ai récemment commencé develping une application utilisant WPF et I'cant vraiment mon esprit sur chose suivante:WPF liaison de données du modèle de données externes

J'ai un modèle de domaine de mon application qui est des objets POCO simples sérialisé vers/depuis le disque dur. Ensuite, j'ai l'application WPF et j'aimerais la lier à différentes parties du modèle. Je dois être capable d'informer l'interface utilisateur des modifications apportées au modèle sous-jacent (par exemple, implémenter INotifyPropertyChanged) MAIS je veux le faire sans interférer avec mon modèle (lire sans modifier l'implémentation actuelle du modèle). Comment puis-je implémenter une notification de modification autre que la modification du modèle? Raison pour laquelle je veux faire cela est que je partage le modèle entre plusieurs projets, dont un seul est WPF, et je ne veux pas ajouter de code inutile au modèle. Une chose qui m'est venue à l'esprit était de créer une "copie" du modèle (avec INotifyPropertyChanges et BindingLists etc.) mais cela semble difficile à maintenir ... Merci d'avance.

Ondrej

+0

J'ai la solution parfaite pour cela, qui consiste à faire un changement cache en réflexion et en utilisant un TypeDescriptor pour faire le look de l'adaptateur comme l'objet original pour databinding ... sauf que le site original des auteurs s'est écrasé et il n'a pas remis cet article en place :(J'essaie de voir si je peux l'amener à le mettre en place, sinon je devrais écrire un article similaire ... –

+0

Je serais très intéressé de voir ce code Avez-vous réussi à le faire remettre l'article? –

Répondre

0

Je vois deux solutions possibles ici:

  1. Utilisez un modèle distinct pour les écrans WPF uniquement (MVVM pattern). Cela nécessitera le maintien de deux modèles différents, aussi être préparé pour beaucoup de code de cartographie.
  2. Utilisez PostSharp pour "améliorer" votre modèle avec tout le code standard requis. Here vous pouvez trouver l'exemple de l'implémentation automatique INotifyPropertyChanged. Rappelez-vous que l'introduction de PostSharp au projet est une décision importante, alors je vous suggère de vous familiariser avec le projet.
2

Check this out MVVM

Télécharger le code source voir la hiérarchie.

Fondamentalement, vous conservez toujours des objets POCO simples comme modèles. Ensuite, vous créez un ViewModel autour du modèle comme celui-ci:

public class CustomerViewModel : INotifyPropertyChanged 
{ 
     readonly Customer _customer; 
     public CustomerViewModel(Customer customer) 
     { 
      _customer = customer; 
     } 

     public string FirstName 
     { 
      get { return _customer.FirstName; } 
      set 
      { 
       if (value == _customer.FirstName) 
        return; 

       _customer.FirstName = value; 

       OnPropertyChanged("FirstName"); 
      } 
     } 
     ... 
} 
Questions connexes