6

Próbuję PCL w projekcie VS 2010, w którym chciałbym wspierać WPF (4 i wyżej) i Silverlight (4 i wyżej). Poniższy fragment o numerze MS documentation jest mylący.Obsługa ViewModel w Portable Class Library

Wygląda na to, że brzmi: dla odniesienia do System.Windows w projekcie PCL, ale nie wiem, jak to zrobić.

Co należy zrobić, aby mieć ICommand i INotifyPropertyChanged w moim projekcie PCL?

Wspieranie Wzorzec Widok Model przypadku kierowania Silverlight i Windows Phone 7, można zaimplementować widoku modelu wzór w rozwiązania . Klasy implementujące ten wzorzec znajdują się w zestawie System.Windows.dll z Silverlight. Zespół System.Windows.dll nie jest obsługiwany podczas tworzenia Portable Class Library projekt, który celuje w NET Framework 4 lub Xbox 360.

Klasy w tym zespole są następujące:

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 zawiera także te klasy, ale są one zaimplementowane w zespołach innych niż System.Windows.dll. Aby skorzystać z tych klas z Portable Class Library projektu, należy odwołać System.Windows.dll a nie zespoły wymienione w .NET Framework 4 dokumentacja

EDIT

INotifyPropertyChanged nie jest dostępny; Poniższy kod nie będzie kompilować

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

    ... 

} 
+0

Oznaczono, że kodujesz 'pcl' dla' Printer control language'. Czy chodziło Ci o "Portable Class Library"? – nvoigt

+0

@nvoight - dziękuję! – Berryl

Odpowiedz

2

Tak, MSDN jest niejasna w tej kwestii (tam jest błąd?)

Zasadniczo, nie masz nic do roboty!

Po utworzeniu projektu PCL wystarczy wybrać odpowiednie ramy. new pcl project

PCL automatycznie zarządza referencjami dla Ciebie.

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

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

Spróbujmy!

+0

To jest myląca część - zrobiłem to! Zobacz moją edycję; Nie uzyskuję dostępu do INotifyPropertyChanged. – Berryl

+0

Czy jesteś na VS 2010 z dodatkiem PCL (jak ja) lub VS2012 z obsługą nativee? – Berryl

+0

VS 2010 z PCL (jak ty) – Cybermaxs