代码之家  ›  专栏  ›  技术社区  ›  Ed Sykes

是否可以使用属性在属性更改时自动引发事件

  •  4
  • Ed Sykes  · 技术社区  · 16 年前

    我发现自己写了很多代码:

        private int _operationalPlan;
        public int OperationalPlan
        {
            get
            {
                return _operationalPlan;
            }
            set
            {
                _operationalPlan = value;
                RaisePropertyChanged();
            }
        }
    
        private void RaisePropertyChanged()
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new
                                          PropertyChangedEventArgs("PlansSelected"));
            }
        }
    

    我想知道是否可以编写一个可以添加到属性中以自动引发事件的属性。也就是这样:

    [RaiseOnSet("ProperyChanged", "PropertyChangedEventArgs", "PlansSelected")]
    public int OperationalPlan
    {
        get
        {
            return _operationalPlan;
        }
        set
        {
            _operationalPlan = value;
            RaisePropertyChanged();
        }
    }
    

    在我开始尝试实施之前,我想知道:

    • 此工具是否在.NET框架中?
    • 有人尝试过这个设施吗
    • 如果可能的话
    • 如果有什么死角我应该避免
    2 回复  |  直到 9 年前
        1
  •  5
  •   Shashank Shekhar    9 年前

    要做到这一点,您需要一个面向.NET的AOP框架,比如 PostSharp AOP.NET

        2
  •  0
  •   Richard    16 年前

    我准备使用助手类包装属性值,您可以这样做。但这意味着任何访问该属性的客户机都需要解包该值。

    另一个路由是使用助手类型,请参阅WPF和WF使用(不同的)DependencyProperty。但您不会得到自动实现的属性。