2014-09-13 77 views
0

我有一個名爲ViewModel類,使用此代碼:調試的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

嗨,你能提供更多的代碼和背景嗎?我在那裏看到的一小部分代碼看起來很腥。回答更多隻是猜測:) – 2014-09-13 07:14:17

+1

它基本上是通過綁定框架來監聽屬性更改通知並更新綁定目標。 – pushpraj 2014-09-13 07:47:19

回答

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表示必須執行對所涉及屬性的重新評估(綁定,運行轉換器等,然後重繪),並且您還可以將自己掛接到它。如果它是空的,那麼UI可能沒有掛鉤,這就是爲什麼我需要更多的信息。它是INotifyPropertyChanged Interface的一部分,因爲你知道ofc :)

無論如何,如果你只是好奇它在內部如何工作,你可以安裝RedGate反射器,它可以讓你步入任何非本地代碼。或者你可以拆卸System.dll並在那裏找到它。

我不確定這是否是你以後。

希望它能幫助,

乾杯

了Stian

+0

我並不是問如何實現OnPropertyChanged事件,而是詢問如何在調用copyOfPropertyChangedEvent時查看執行什麼方法。調用copyOfPropertyChangedEvent時執行哪些代碼? – 2014-09-15 06:25:17