I am trying out the PCL in a VS 2010 project in which I would like to support WPF (4 and higher) and Silverlight (4 and higher). The MS documentation excerpt below is confusing to me.
It seems to be saying to reference System.Windows in the PCL project, but I don't see how to do that.
What must I do to have ICommand and INotifyPropertyChanged in my PCL project?
Supporting the View Model Pattern When you target Silverlight and Windows Phone 7, you can implement the view model pattern in your solution. The classes to implement this pattern are located in the System.Windows.dll assembly from Silverlight. The System.Windows.dll assembly is not supported when you create a Portable Class Library project that targets the .NET Framework 4 or Xbox 360.
The classes in this assembly include the following:
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
The .NET Framework 4 also contains these classes, but they are implemented in assemblies other than System.Windows.dll. To use these classes with a Portable Class Library project, you must reference System.Windows.dll and not the assemblies listed in the .NET Framework 4 documentation
INotifyPropertyChanged is NOT available; the code below will not compile
public abstract class ViewModelBase : INotifyPropertyChanged
{
public virtual event PropertyChangedEventHandler PropertyChanged;
...
}
Yes, the MSDN is confusing on this point (is there an error ?)
Basically, you have nothing to do !
Whe you create your PCL project, simply select appropriate frameworks.
PCL automatically manage references for you.
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
Let's try !
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With