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

时间:2009-06-11 11:11:51

标签: c# .net data-binding events attributes

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

    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 个答案:

答案 0 :(得分:5)

要做到这一点,您需要一个适用于.NET的AOP框架,例如PostSharpAOP.NET

答案 1 :(得分:0)

我准备使用帮助器类来包装您可以执行此操作的属性值。但这意味着任何访问该属性的客户都需要打开该值。

另一种方法是使用辅助类型,请参阅WPF和WF,使用(不同的)DependencyProperty。但是你没有自动实现属性。