2014-09-13 11 views
0

У меня есть класс с именем ViewModel, с этим кодом:Debugging PropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

var copyOfPropertyChangedEvent = PropertyChanged; 

if (copyOfPropertyChangedEvent != null) 
{ 
    var args = ViewModel.GetPropertyChangedEventArgs(propertyName); 
    copyOfPropertyChangedEvent(this, args); 
} 

Когда я отладки это, я хочу посмотреть, что происходит в случае copyOfPropertyChangedEvent. Когда я нажимаю на F12, он возвращает меня к строке: var copyOfPropertyChangedEvent = PropertyChanged; Когда я ищу все возможности PropertyChanged, Visual Studio дает мне несколько вариантов использования, и когда я устанавливаю точку останова во всех них, ни один из них не попадает.

Как я могу узнать, что происходит в событии PropertyChanged?

+1

Привет, мог бы вы предоставить больше коды и контекст, пожалуйста? Крошечный бит кода, который я вижу там, выглядит действительно подозрительно. Ответ больше будет просто спекуляцией :) –

+1

он в основном используется связующим фреймом для прослушивания измененных изменений свойств и обновления привязки. – pushpraj

ответ

0

Хорошо, мы будем стараться спекуляцию тогда :)

Во-первых, я бы реализовать это следующим образом, в качестве R # делает.

public class YourViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] // remove if no R# 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged;    
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    // ..... 
} 

Теперь я уверен, что вы знаете, что даже в основном просто содержит список методов для вызова. PropertyChanged используется каркасом, чтобы сигнализировать GUI, что необходимо выполнить переоценку рассматриваемого свойства (привязки, запуск преобразователей и т. Д., А затем перерисовать), и вы также можете подключить себя к нему. Если он равен нулю, возможно, пользовательский интерфейс не подключен, поэтому я прошу предоставить дополнительную информацию. Это часть INotifyPropertyChanged Interface, так как вы знаете ofc :)

В любом случае, если вам просто интересно, как это работает внутри, вы можете установить RedGate Reflector, который позволит вам вступить в любой не собственный код. Или вы можете дизассемблировать System.dll и проследить его там.

Я не уверен, что это то, о чем вы говорили.

Надеется, что это помогает,

Приветствия

Stian

+0

Я не спрашивал, как реализовать событие OnPropertyChanged, я спрашивал, как увидеть, какой метод выполняется при вызове copyOfPropertyChangedEvent. Какой код выполняется при вызове copyOfPropertyChangedEvent? –