Где находится метод обработчика события PropertyChaned? - PullRequest
2 голосов
/ 04 февраля 2010

Я пишу следующий код, чтобы связать данные из фонового объекта с пользовательским интерфейсом WinForm. Я использую интерфейс INotifyPropertyChanged, чтобы уведомить пользовательский интерфейс об изменении свойства. Но я не видел, чтобы какой-либо обработчик событий был явно назначен событию PropertyChanged. И я проверил свою сборку с помощью .NET Reflector и до сих пор не нашел соответствующего обработчика событий? Где находится обработчик события PropertyChanged? Это очередная хитрость компилятора Microsoft?

Вот код фонового объекта:

    public class Calculation :INotifyPropertyChanged
{
    private int _quantity, _price, _total;

    public Calculation(int quantity, int price)
    {
        _quantity = quantity;
        _price = price;
        _total = price * price;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)// I DIDN'T assign an event handler to it, how could  
                                    // it NOT be null??
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public int Quantity
    {
        get { return _quantity; }
        set 
        { 
            _quantity = value;
            //Raise the PropertyChanged event
            NotifyPropertyChanged("Quantity");
        }
    }

    public int Price
    {
        get { return _price; }
        set 
        {
            _price = value;
            //Raise the PropertyChanged event
            NotifyPropertyChanged("Price");
        }
    }

    public int Total
    {
        get { return _quantity * _price; }
    }
}

Большое спасибо!

1 Ответ

1 голос
/ 04 февраля 2010

Я не уверен, что понимаю вопрос, но если вы используете привязку данных, то привязанный элемент управления / форма привязывается к вашему классу - либо через интерфейс INotifyPropertyChanged (как в этом случае), либо как отражениепо шаблону *Changed (через PropertyDescriptor).Если вы действительно хотите, вы можете перехватить части события add / remove и посмотреть трассировку стека, чтобы узнать, кто добавляет / удаляет обработчики:

private PropertyChangedEventHandler propertyChanged;
public event PropertyChangedEventHandler PropertyChanged {
    add { propertyChanged += value; } // <<======== breakpoint here
    remove { propertyChanged -= value; } // <<===== breakpoint here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...