6

我正在使用 VS 2017 社区版我正在创建 MVVM 模式。安装 fody 后,我的代码出现错误,而本教程的讲师在 vs 2015 上实现了它,代码如下:

using PropertyChanged;
using System.ComponentModel;

namespace GProject_MVVM.ViewModel
{
    /// <summary>
    /// A base view model that fires Property Changed events as needed
    /// </summary>
    [ImplementPropertyChanged] // **I got error here**
    public class BaseViewModel : INotifyPropertyChanged
    {
        /// <summary>
        /// The event that is fired when any child property changes its value
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { };
        /// <summary>
        /// Call this to fire <see cref="PropertyChanged"/> event
        /// </summary>
        /// <param name="name"></param>
        public void OnPropertyChanged(string name)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));

        }
    }
}

[ImplementPropertyChanged] 在这一点上不应该出错,教师成功地实施了它,所以我的代码中是否缺少任何东西?错误说:

严重性代码描述项目文件行抑制状态错误 CS0619“ImplementPropertyChangedAttribute”已过时:“此配置选项已被弃用。此属性的用途是将 INotifyPropertyChanged 添加到具有关联事件定义的类中。之后,所有实现 INotifyPropertyChanged 的​​类都编织了它们的属性,不管它们是否具有 ImplementPropertyChangedAttribute。此属性通常被错误地解释为选择加入属性编织的方法,这既不是意图,也不是它的操作方式。此属性已替换为 AddINotifyPropertyChangedInterfaceAttribute。' GProject_MVVM c:\users\ahmed hussainy\documents\visual studio 2017\Projects\GProject_MVVM\GProject_MVVM\ViewModel\BaseViewModel。

4

2 回答 2

17

例外已经说明了答案。

ImplementPropertyChangedAttribute' 已过时:'此配置选项已被弃用。此属性的用途是将 INotifyPropertyChanged 添加到具有关联事件定义的类中。之后,所有实现 INotifyPropertyChanged 的​​类都编织了它们的属性,不管它们是否具有 ImplementPropertyChangedAttribute。

使用新版本的 Fody.PropertyChanged,您不再需要添加该属性。只需使您想要编织的那个类实现INotifyPropertyChanged,它就会起作用。

所以基本上只需删除/删除[ImplementPropertyChanged]它就会编译和编织(如果编织器存在于FodyWeavers.xml

于 2017-06-10T06:36:55.480 回答
1

如果您最初使用此属性的方式与它的预期使用方式完全相同,则应将其替换为[AddINotifyPropertyChangedInterface].

这样 Fody 会将INotifyPropertyChanged接口添加到您的类中,然后编织器将正确实现它。

于 2021-04-24T13:46:04.610 回答