可移植类库中的ViewModel支持

时间:2013-05-02 14:00:56

标签: wpf visual-studio-2010 silverlight portable-class-library

我正在尝试在VS 2010项目中使用PCL,我希望支持WPF(4及更高版本)和Silverlight(4及更高版本)。下面的MS documentation 摘录让我感到困惑。

似乎要在PCL项目中引用System.Windows,但我不知道该怎么做。

我必须做些什么才能在我的PCL项目中安装ICommand和INotifyPropertyChanged?

  

支持视图模型模式当您定位Silverlight和   在Windows Phone 7中,您可以在您的Windows中实现视图模型模式   解。实现此模式的类位于   Silverlight的System.Windows.dll程序集。 System.Windows.dll   创建可移植类库时不支持程序集   面向.NET Framework 4或Xbox 360的项目。

     

此程序集中的类包括以下内容:

     

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也包含这些类,但它们是   实施于       System.Windows.dll以外的程序集。将这些类与Portable Class一起使用       库项目,您必须引用System.Windows.dll而不是列出的程序集       .NET Framework 4文档

修改

INotifyPropertyChanged不可用;下面的代码不会编译

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

    ...

}

1 个答案:

答案 0 :(得分: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));
            }
        }
    }

我们试试吧!