6

Я тестирую PCL в проекте VS 2010, в котором я хотел бы поддерживать WPF (4 и выше) и Silverlight (4 и выше). Вышеприведенный фрагмент MS documentation смущает меня.Поддержка ViewModel в библиотеке портативных классов

Это кажется, чтобы сказать ссылку System.Windows в проекте PCL, но я не вижу, как это сделать.

Что я должен сделать, чтобы иметь ICommand и INotifyPropertyChanged в моем проекте PCL?

Поддержка Pattern View Model Когда цель Silverlight и Windows Phone 7, вы можете реализовать шаблон вид модели в вашем растворе. Классы для реализации этого шаблона находятся в сборке System.Windows.dll из Silverlight. System.Windows.dll сборка не поддерживается при создании портативного библиотеки классов проект, который предназначается для платформы .NET Framework 4 или Xbox 360.

Классы в этой сборке включают в себя следующее:

системы. 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 также содержит эти классы, но они реализованы в ассамблеях, отличных от System.Windows.dll. Для того, чтобы использовать эти классы с портативной библиотеки классов , вы должны ссылаться на System.Windows.dll и не сборки, перечисленные в в .NET Framework 4 документация

EDIT

INotifyPropertyChanged не доступен; Приведенный ниже код не будет компилироваться

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

    ... 

} 
+0

Вы отметили код 'pcl' для' языка управления принтером'. Вы имели в виду «Portable Class Library» вместо этого? – nvoigt

+0

@nvoight - спасибо! – Berryl

ответ

2

Да, MSDN путает по этому вопросу (там ошибка?)

В принципе, у вас нет ничего общего!

Вы создаете свой проект PCL, просто выберите подходящие рамки. new pcl project

PCL автоматически управляет ссылками для вас.

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

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

Давайте попробуем!

+0

Это запутанная часть - я сделал это! См. Мое редактирование; Я не получаю доступ к INotifyPropertyChanged. – Berryl

+0

Вы на VS 2010 с надстройкой PCL (как я) или VS2012 с поддержкой родной? – Berryl

+0

VS 2010 с PCL (как вы) – Cybermaxs

Смежные вопросы