[英]Why my event is always null?
我正在嘗試使用事件引發代碼。 但是,每當事件引發時, if
語句就永遠不會為true,因為PropertyChanged
始終為null。
public delegate void MyEventHandler(object sender, String change);
public event MyEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null) //It is always null here
{
PropertyChanged(this, propertyName);
}
}
這是我訂閱此活動的方式:
data.facebook.PropertyChanged+=new Facebook.MyEventHandler(Facebook_PropertyChanged);
data.PropertyChanged+= new RootObject.MyEventHandler( data_PropertyChanged);
這是班
public class Facebook
{
public Facebook()
{
_commentsbox_count = 0;
_comment_count = 0;
_click_count = 0;
_like_count = 0;
_share_count = 0;
_total_count = 0;
}
double _commentsbox_count;
double _click_count;
double _total_count;
double _comment_count;
double _like_count;
double _share_count;
public double commentsbox_count
{
get {
return _commentsbox_count;
}
set {
_commentsbox_count = value;
NotifyPropertyChanged("commentsbox_count");
}
}
public double click_count {
get
{
return _click_count;
}
set
{
_click_count = value;
NotifyPropertyChanged("click_count");
}
}
public double total_count {
get
{
return _total_count;
}
set
{
_total_count = value;
NotifyPropertyChanged("total_count");
}
}
public double comment_count {
get
{
return _comment_count;
}
set
{
_comment_count = value;
NotifyPropertyChanged("comment_count");
}
}
public double like_count {
get
{
return _like_count;
}
set
{
_like_count = value;
NotifyPropertyChanged("like_count");
}
}
public double share_count {
get
{
return _share_count;
}
set
{
_share_count = value;
NotifyPropertyChanged("share_count");
}
}
public delegate void MyEventHandler(object sender, String change);
public event MyEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, propertyName);
}
}
}
public class RootObject
{
public RootObject()
{
_stumbleUpon = 0;
_twitter = 0;
_reddit = 0;
_pinterest = 0;
_linkedin = 0;
_googleplusone = 0;
_diggs = 0;
_delicious = 0;
_buzz = 0;
}
public Facebook facebook=new Facebook();
double _stumbleUpon;
double _reddit;
double _delicious;
double _googleplusone;
double _buzz;
double _twitter;
double _diggs;
double _pinterest;
double _linkedin;
public double StumbleUpon {
get
{
return _stumbleUpon;
}
set
{
_stumbleUpon = value;
NotifyPropertyChanged("StumbleUpon");
}
}
public double Reddit {
get
{
return _reddit;
}
set
{
_reddit = value;
NotifyPropertyChanged("Reddit");
}
}
public Facebook Facebook {
get
{
return facebook;
}
set
{
facebook = value;
}
}
public double Delicious {
get
{
return _delicious;
}
set
{
_delicious = value;
NotifyPropertyChanged("Delicious");
}
}
public double GooglePlusOne {
get
{
return _googleplusone;
}
set
{
_googleplusone = value;
NotifyPropertyChanged("GooglePlusOne");
}
}
public double Buzz
{
get
{
return _buzz;
}
set
{
_buzz = value;
NotifyPropertyChanged("Buzz");
}
}
public double Twitter
{
get
{
return _twitter;
}
set
{
_twitter = value;
NotifyPropertyChanged("Twitter");
}
}
public double Diggs
{
get
{
return _diggs;
}
set
{
_diggs = value;
NotifyPropertyChanged("Diggs");
}
}
public double Pinterest
{
get
{
return _pinterest;
}
set
{
_pinterest = value;
NotifyPropertyChanged("Pinterest");
}
}
public double LinkedIn
{
get
{
return _linkedin;
}
set
{
_linkedin = value;
NotifyPropertyChanged("LinkedIn");
}
}
public delegate void MyEventHandler(object sender, String change);
public event MyEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, propertyName);
}
}
}
這就是初始化數據的方式
RootObject data = new RootObject();
可能的原因是什么?
更新資料
好吧,我明白了。 將值分配給數據時,將創建一個臨時Facebook對象。 然后將其復制到data.Facebook(復制構造函數)。 這就是為什么該臨時Facebook對象未訂閱並在事件中提供null的原因。 由於它是使用復制構造函數復制的。 在data.facebook中未觸發NotifyPropertyChanged。 現在我把范圍縮小了。 但是我不知道這是怎么回事。 有什么建議嗎?
僅當您將事件處理程序添加到類的另一個實例時,才有可能。 檢查是否還有其他實例?
另外,為什么不使用內置的INotifyPropertyChanged接口並為此創建自己的委托?
編輯 :
正如我在您的代碼中看到的那樣,您創建了Facebook
類的實例:
Facebook facebook = new Facebook();
但是您不訂閱實例的PropertyChanged
事件。
此外,您允許其他開發人員在此處用另一個類替換Facebook類的實例:
public Facebook Facebook {
get
{
return facebook;
}
set
{
facebook = value;
}
}
因此,另一個未初始化的對象可能會存儲在這里。 我建議刪除公共集。
最后:我看不到這兩個類如何相互聯系。 我只看到在RootObject
實例化的Facebook
類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.