2011-01-12 3 views
0

Ich versuche, meiner Silverlight-Seite nach einem WCF-Aufruf dynamische Steuerelemente hinzuzufügen. Wenn ich versuche, ein Steuerelement hinzuzufügen, erhalte ich einen Fehler: Objektreferenz wird nicht auf eine Instanz eines Objekts gesetzt.Hinzufügen von dynamischen Steuerelementen zur Silverlight-Anwendung nach dem asynchronen Rückruf von WCF-Dienst

Hier ist eine vereinfachte Version von meinem Code:

using edm = SilverlightBusinessApplication.ServiceRefrence; 

public partial class ListWCF : Page 
    { 
     edm.ServiceClient EdmClient = new ServiceClient(); 
     public ListWCF() 
     { 
      EdmClient.GetTestCompleted += EdmGetTestCompleted; 
      EdmClient.GetTestAsync(); 
     } 

     private void EdmGetTestCompleted(object sender, edm.GetTestCompletedEventArgs e) 
     { 
      //This is where I want to add my controls 
      Button b = new Button(); 
      LayoutRoot.Children.Add(b); //Error: Object reference not set to an instance of an object 
     } 

    } 

Ist es nicht möglich, die Seite zu ändern, nachdem es geladen wurde? Was vermisse ich?

Dank

Antwort

2

Ja, es ist möglich, die Seite zu ändern, nachdem es geladen wurde.

Die erste Sache, die Sie tun sollten, wenn Sie diese Art von Ausnahme erfüllen, ist festzustellen, welche Ihrer Variablen null sind. Dies sollte über den Debugger möglich sein. Fügen Sie einen Haltepunkt in diese Codezeile ein (oder weisen Sie VS an, zu brechen, wenn Ausnahmen ausgelöst werden) und untersuchen Sie die Variablen. Ich vermute, dass LayoutRoot null ist.

Ich kann einen Aufruf von InitializeComponent() in Ihrem Klassenkonstruktor nicht sehen. Innerhalb eines Silverlight-Benutzersteuerelements ruft dieser Aufruf die generierte Klasse auf, die Ihr XAML erstellt, und sucht auch die benannten Elemente (x: Name), sodass Sie über Ihren Code darauf zugreifen können.

+0

+1, gute fangen auf InitializeComponent – Josh

+0

Ich fühle mich albern, danke für den Haken. Ich habe mich selbst verrückt gemacht, als ich versucht habe, Antworten auf ein Problem zu googlen, das ich nicht einmal hatte. – Birk

+0

Kein Problem - froh, dass es so einfach war :-) – ColinE