2009-05-17 7 views
1

Ich habe vor kurzem begonnen, eine Anwendung develping mit WPF und I'cant wirklich folgenden Sache meiner Meinung nach um wickeln:WPF Datenbindung an externem Datenmodell

ich ein Domain Model meiner Anwendung, die einfach POCO serialisierte Objekte zu/von der Festplatte. Dann habe ich die WPF-Anwendung und möchte sie an verschiedene Teile des Modells binden. Ich muss in der Lage sein, UI über Änderungen des zugrunde liegenden Modells zu benachrichtigen (z. B. INotifyPropertyChanged implementieren), aber ich möchte das tun, ohne mit meinem Modell zu interferieren (lesen, ohne die aktuelle Implementierung des Modells zu modifizieren). Wie kann ich die Änderungsbenachrichtigung implementieren, außer das Modell zu ändern? Grund, warum ich das tun möchte, ist, dass ich das Modell unter mehreren Projekten teile, nur eines ist WPF, und ich möchte nicht unnötigen Code zum Modell hinzufügen. Eine Sache, die mir in den Sinn kam, war eine "Kopie" des Modells (mit INotifyPropertyChanges und BindingLists etc.) zu erstellen, aber das scheint schwierig zu sein ... Vielen Dank im Voraus.

Ondrej

+0

ich die perfekte Lösung für dieses, die eine Änderung beinhaltet das Herstellen-Cache Reflexion und unter Verwendung eines TypeDescriptor, um den Adapter aussehen zu lassen wie das Original-Objekt für die Datenbindung ... außer dass die ursprüngliche Autorenseite abgestürzt ist und er diesen Artikel nicht wieder hochgeladen hat :(. Ich versuche zu sehen, ob ich ihn dazu bringen kann, es aufzustellen, sonst müsste ich vielleicht einen ähnlichen Artikel schreiben ... –

+0

Ich würde mich sehr dafür interessieren, diesen Code zu sehen. Hast du es geschafft, ihn dazu zu bringen, den Artikel wieder hochzuladen? Danke –

Antwort

0

Ich sehe zwei mögliche Lösungen hier:

  1. Verwenden Sie ein separates Modell für WPF-Bildschirme nur (MVVM pattern). Dies erfordert die Pflege von zwei verschiedenen Modellen, auch für viele Mapping-Code vorzubereiten.
  2. Verwenden Sie PostSharp, um Ihr Modell mit allen erforderlichen Boilerplate-Codes zu "erweitern". Here können Sie Beispiel der automatischen INotifyPropertyChanged-Implementierung finden. Denken Sie daran, dass die Einführung von PostSharp in das Projekt eine wichtige Entscheidung ist, daher empfehle ich, sich zuerst mit dem Thema vertraut zu machen.
2

Check this out MVVM

Laden Sie den Quellcode finden Sie in der Hierarchie.

Grundsätzlich halten Sie immer noch einfache POCO-Objekte als Ihre Modelle. Dann erstellen Sie ein Ansichtsmodell um das Modell wie folgt aus:

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"); 
      } 
     } 
     ... 
}