6

Ich probiere die PCL in einem VS 2010-Projekt aus, in dem ich WPF (4 und höher) und Silverlight (4 und höher) unterstützen möchte. Der unten stehende Auszug aus MS documentation ist für mich verwirrend.ViewModel-Unterstützung in der Portable Class-Bibliothek

Es scheint zu sagen, System.Windows im PCL-Projekt zu verweisen, aber ich sehe nicht, wie man das macht.

Was muss ich tun, um ICommand und INotifyPropertyChanged in meinem PCL-Projekt zu haben?

Unterstützung der Ansicht Modell Pattern Wenn Sie Silverlight und Windows Phone Ziel 7, können Sie die Ansicht Modellmuster in Ihrer Lösung implementieren. Die Klassen zum Implementieren dieses Musters befinden sich in der System.Windows.dll-Assembly von Silverlight. Die System.Windows.dll Montage wird nicht unterstützt, wenn Sie eine Portable Klassenbibliothek Projekt erstellen, das die .NET Framework 4 oder Xbox 360.

Die Klassen in dieser Versammlung Ziele sind die folgenden:

-System. Collections.ObjectModel.ObservableCollection

System.Collections.ObjectModel.ReadOnlyObservableCollection

System.Collections.Specialized.INotifyCollectionChanged

System.Collections.Specialized.NotifyCollectionChangedAction

System.Collections.Specialized.NotifyCollectionChangedEventArgs

System.Collections.Specialized.NotifyCollectionChangedEventHandler

System.Windows.Input.ICommand

.NET Framework 4 enthält auch diese Klassen, aber sie sind implementiert in Assemblys außer System.Windows.dll. Um diese Klassen mit einem Portable Klassen Bibliotheksprojekt zu verwenden, müssen Sie System.Windows.dll verweisen und nicht die aufgeführten Baugruppen in das .NET Framework 4 Dokumentation

EDIT

INotifyPropertyChanged nicht verfügbar ist; der folgende Code kompiliert nicht

public abstract class ViewModelBase : INotifyPropertyChanged 
{ 
    public virtual event PropertyChangedEventHandler PropertyChanged; 

    ... 

} 
+0

Sie haben den Code 'pcl' für' Printer control language' markiert. Meinst du "Portable Class Library"? – nvoigt

+0

@nvoight - danke! – Berryl

Antwort

2

Ja, die MSDN auf diesem Punkt verwirrend (gibt es ein Fehler?)

Grundsätzlich Sie nichts zu tun haben!

Wenn Sie Ihr PCL-Projekt erstellen, wählen Sie einfach die entsprechenden Frameworks aus. new pcl project

PCL verwaltet Referenzen automatisch für Sie.

public abstract class ViewModelBase : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged(string propName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
      } 
     } 
    } 

Lassen Sie uns versuchen!

+0

Das ist der verwirrende Teil - ich habe das getan! Siehe meine Bearbeitung; Ich bekomme keinen Zugriff auf INotifyPropertyChanged. – Berryl

+0

Sind Sie auf VS 2010 mit PCL Add-In (wie ich) oder VS2012 mit nativee Unterstützung? – Berryl

+0

VS 2010 mit PCL (wie du) – Cybermaxs