如何将INotifyPropertyChanged添加到包含泛型类型的类?

时间:2019-07-17 20:17:56

标签: c# wpf generics

WPF C#泛型

我对泛型非常陌生。我正在尝试为具有私有设置者的实体创建编辑器,例如:

public class EditorBase<T>  where T: class, new() 
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
}



public class AccountEditor<T> :  EditorBase<T> where T : class, new()
    {
        public AccountEditor()
        {
            bR = new BillingRepository();
            pt = new ViewPatient();
        }

        public viewName Name { get; private set; }
        public ViewPatient pt { get; private set; }

        public virtual async void SetAccountAsync(viewName _name)
        {
            Name = _name;
            if (_name == null)
                pt = new ViewPatient();
            else
            {
                pt = await bR.GetPersonByNameAsync(_name.lastName, _name.firstName, DateTime.Parse(_name.birthDate));
                RaisePropertyChanged();
            }
        }


        private readonly BillingRepository bR;

        private string _mi;
        public string mi
        {
            get { return pt.mi; }
            set { if (pt.mi == value) return; pt.SetMi(value); RaisePropertyChanged(); }
}

而不是实施INotifyPropertyChanged的实体,我正在使用 绑定编辑器。我的问题是将接口添加到的语法 编辑器类。

如何将INotifyPropertyChanged接口添加到类EditorBase声明中?

此语法失败: EditorBase,其中T:class,new():INotifyPropertyChanged

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

此语法失败:EditorBase,其中T:class,new():INotifyPropertyChanged

正确的语法是EditorBase<T> : INotifyPropertyChanged where T:class, new()

  

由于实体具有私有设置器,因此它们无法自行实现INotifyPropertyChanged

老实说,我不知道你的意思。任何类都可以声明是否实现任何接口,而不管其属性设置器使用什么可见性。