2013-08-26 8 views
5

, ben bir olay işleyicisi kayıt ediyorum:Olay İşleyici boş <code>MainWindow</code> Yapıcıda

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"); 
     } 
    } 
} 

Ama PageViewDocText yılında, NewPageIRPRO null yanlış yapıyorum

?
PageViewDocText'dan, MainWindow.ViewIPRO numaralı telefonu aramak istiyorum.

Bu olay işleyicisi patlar ve pageViewDocText.NewPageIRPRO altında çizgisini kayıtlı olduğu + = sen (değil listelenmiştir) başka bir sınıftan bir olay aradığınız ve eksik bir temsilci olduğu gibi

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

'PageViewDocText' yapıcı yangın o olay:

bu kodu deneyin? Bu hata ayıklaması kolaydır; sadece çağrı yığına bak. Saldırı kodunu terk etmedikçe, etkinliğin abonelikten sonra null olmaması mümkün değildir. –

+1

Bizi, NewPageIRPRO'nun null olduğu yerden aldığınız kod satırını göstermeniz gerektiğini düşünüyorum. –

+0

@EdS. Düğme olay işleyicisi bu olayı tetiklemez. Olay işleyicisinin neden boş olduğunu da kaybettim. GabeLib'de (saf bir sınıf) olay işleyicisini aynı şekilde görüyorum ve iyi çalışıyor. – Paparazzi

cevap

1

görünüyor. Does

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

Takip etmiyorum. btn_PageBreakNext, sayfada bir düğme için bir olay işleyicisidir ve herhangi bir sayfa veya sınıf tarafından aranmaz. – Paparazzi

+0

Kodunuzla benzer bir sınıfta oluşturulmuş olay temsilcisiyle örnek bir proje oluşturdum ve her zaman işe yarayacak gibi görünüyor. Yani, kodunuzun doğru olduğunu düşünüyorum. NewPageIRPRO'nun null olması, MainWindow tarafından oluşturulan aynı örneği değil, PageViewDocText'in farklı bir örneği olabileceğini gösterir. DocEventHandler temsilcisini PageViewDocText'in yapıcısına yerleştirmenizi öneririm. Örneğin. PageViewDocText (SearchCls.DocEventHandler NewPageIRPRO) {this.NewPageIRPRO = NewPageIRPRO; }. Bu, herhangi bir örneğin işleyici olmadan oluşturulmasını önlemelidir. – sharpguru

+0

Hala üzerinde çalışıyor. Ve size katılıyorum yorumlarınız. Dışarıda iki PageViewDocText nesnesi olduğu ortaya çıkıyor. DocEventHandler'ı ctor'a yerleştirmek bunu düzeltecekti ama neden iki tane olduğunu anlamak istiyorum. – Paparazzi

İlgili konular