2013-08-26 162 views
5

MainWindow構造,我註冊一個事件處理程序:事件處理空

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     pageViewDocText = new PageViewDocText(); 
     framePageDocFieldDetail.Content = pageViewDocText; 
     pageViewDocText.NewPageIRPRO += new GabeLib.SearchCls.DocEventHandler(ViewIPRO); 
    } 

    protected void ViewIPRO(string IRPOlink) // ... 
} 

public partial class PageViewDocText : Page, INotifyPropertyChanged 
{ 
    public event GabeLib.SearchCls.DocEventHandler NewPageIRPRO; 

    private void btn_PageBreakNext(object sender, RoutedEventArgs e) 
    { 
     // this fires but NewPageIRPRO is null 
     if (NewPageIRPRO != null) 
     { 
      NewPageIRPRO("dummylink"); 
     } 
    } 
} 

但在PageViewDocTextNewPageIRPRO是空

我在做什麼錯?我想撥打MainWindow.ViewIPRO

此事件處理火災和註冊下面pageViewDocText.NewPageIRPRO行+ =

App.StaticGabeLib.Search.NewDocIRPRO += new GabeLib.SearchCls.DocEventHandler(ViewIPRO); 
+3

請問'PageViewDocText'構造火的活動?這很容易調試;只要看看調用堆棧。在訂閱之後,沒有辦法使該事件爲空,除非您排除了違規代碼。 –

+1

我想你需要向我們展示你選擇'NewPageIRPRO'爲空的代碼行。 –

+0

@EdS。沒有按鈕事件處理程序觸發該事件。我失去了爲什麼事件處理程序也是空的。在GabeLib中(一個純類),我使用事件處理程序似乎是相同的方式,它工作正常。 – Paparazzi

回答

1

看起來你在呼喚從另一個類(未上市)的事件,是有缺失的委託。

試試這個代碼:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     pageViewDocText = new PageViewDocText(); 
     framePageDocFieldDetail.Content = pageViewDocText; 
     pageViewDocText.PageBreakNext += new PageBreakNext(ViewIPRO); 
    } 

    protected void ViewIPRO(string IRPOlink) // ... 
} 

public partial class PageViewDocText : Page, INotifyPropertyChanged 
{ 
    public delegate void PageBreakNext(string IRPOlink); 
    public event PageBreakNext PageBreak; 

    private void btn_PageBreakNext(object sender, RoutedEventArgs e) 
    { 
     // this fires but NewPageIRPRO is null 
     if (PageBreak != null) 
     { 
      PageBreak("dummylink"); 
     } 
    } 
} 
+0

我不關注。 btn_PageBreakNext是頁面上按鈕的事件處理程序,不會被任何頁面或類調用。 – Paparazzi

+0

我創建了一個樣例項目,其中在另一個類中創建了與您的代碼類似的事件委託,並且它似乎總能工作。所以,我認爲你的代碼是正確的。由於NewPageIRPRO爲空,表明它可能是PageViewDocText的一個不同實例,而不是由MainWindow創建的實例。我建議將DocEventHandler委託放在PageViewDocText的構造函數中。例如PageViewDocText(SearchCls.DocEventHandler NewPageIRPRO){this.NewPageIRPRO = NewPageIRPRO; }。這應該防止沒有處理程序的情況下創建任何實例。 – sharpguru

+0

仍在工作。我同意你的意見。它似乎確實有兩個PageViewDocText對象。將DocEventHandler放在ctor中會解決這個問題,但我想知道爲什麼有兩個。 – Paparazzi