Можно ли использовать атрибуты, чтобы автоматически вызывать событие при изменении свойства - PullRequest
4 голосов
/ 11 июня 2009

Я часто пишу этот код:

    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 framework
  • Кто-нибудь пытался на этом объекте
  • Если это возможно
  • Если есть какие-то тупики, которых мне следует избегать

Ответы [ 2 ]

5 голосов
/ 11 июня 2009

Для этого вам понадобится AOP-инфраструктура для .NET, например PostSharp или AOP.NET

0 голосов
/ 11 июня 2009

Если вы готовы использовать вспомогательный класс для переноса значений свойств, вы можете сделать это. Но это означает, что любой клиент, получающий доступ к свойству, должен будет развернуть значение.

Другой способ - использовать вспомогательный тип, см. WPF и WF, использующие (разные) DependencyProperty для этого. Но вы не получите автоматически реализованные свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...