可移植类库中的ViewModel支持

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

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

我必须做什么才能在PCL项目中使用ICommand和INotifyPropertyChanged?

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

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

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以外的程序集中实现。 要将这些类用于可移植类库项目,必须引用System.Windows.dll,而不是.NET Framework 4文档中列出的程序集

编辑

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

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

    ...

}

是的,MSDN在这一点上令人困惑(是否有错误?)

基本上,你无事可做!

当你创建你的PCL项目时,只需选择适当的框架即可。 新的pcl项目

PCL自动为您管理参考。

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

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

咱们试试吧 !

链接地址: http://www.djcxy.com/p/68855.html

上一篇: ViewModel support in Portable Class Library

下一篇: Portable Class Libraries & WebRequest.ContentLength