6

我正在一个 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;

    ...

}
4

1 回答 1

2

是的,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));
            }
        }
    }

咱们试试吧 !

于 2013-05-02T14:40:11.720 回答