6

Sto provando il PCL in un progetto VS 2010 in cui vorrei supportare WPF (4 e versioni successive) e Silverlight (4 e versioni successive). L'estratto di MS documentation di seguito mi confonde.Supporto ViewModel nella libreria di classi portatili

E sembra dire a fare riferimento a System.Windows nel progetto PCL, ma non vedo come farlo.

Cosa devo fare per avere ICommand e INotifyPropertyChanged nel mio progetto PCL?

Sostenere il pattern Model View Quando indirizzi Silverlight e Windows Phone 7, è possibile implementare il modello di vista del modello nella soluzione . Le classi per implementare questo modello si trovano nell'assembly System.Windows.dll di Silverlight. L'assemblea System.Windows.dll non è supportata quando si crea un progetto Portable Class Library che gli obiettivi del .NET Framework 4 o Xbox 360.

Le classi di questa assemblea sono i seguenti:

sistema. 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

Il .NET Framework 4 contiene anche queste classi, ma sono implementate negli assembly diversi da System.Windows.dll. Per utilizzare queste classi con un portatile progetto Libreria di classi , è necessario fare riferimento System.Windows.dll e non i gruppi elencati nel .NET Framework 4 documentazione

EDIT

INotifyPropertyChanged non è disponibile; il codice qui sotto non viene compilato

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

    ... 

} 
+0

Hai codificato il tuo codice 'pcl' per' Printer control language'. Intendevi invece "Portable Class Library"? – nvoigt

+0

@nvoight - grazie! – Berryl

risposta

2

Sì, la MSDN confonde su questo punto (c'è un errore?)

In sostanza, non hai niente da fare!

Quando si crea il progetto PCL, selezionare semplicemente framework appropriati. new pcl project

PCL gestisce automaticamente i riferimenti per voi.

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

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

Proviamo!

+0

Questa è la parte confusa - l'ho fatto! Vedi la mia modifica; Non riesco ad accedere a INotifyPropertyChanged. – Berryl

+0

Sei su VS 2010 con add-in PCL (come me) o VS2012 con supporto nativo? – Berryl

+0

VS 2010 con PCL (come te) – Cybermaxs

Problemi correlati