2013-01-16 4 views
-1

J'ai suivi la question this et j'ai essayé de construire ma solution. Le problème est que 'UserControlButtonClicked' semble être null! Donc 'UserControlButtonClicked (this, EventArgs.Empty)' dans le si, ne fonctionne pas, et la méthode 'addStepContent' dans la page parente n'est jamais appelée.Appel d'une méthode d'une page parente à partir de UserController

UserControl 'StepsBar'

public sealed partial class StepsBar : UserControl 
    { 

     public event EventHandler UserControlAddStepContent; 

     [...] 

    public StepsBar() 
    { 
     this.InitializeComponent(); 
        Image step_1 = new Image(); 

     ButtonInfo step_1Info = new ButtonInfo(); 
     step_1Info.Add((int)stepNumber.one, (int)stepStatus.normal); 
     step_1.Tag = step_1Info; 

     step_1.Source = setBackground((int)stepStatus.normal); 
     step_1.Tapped += stepTapped; 

     [...] 
    } 

public void stepTapped(Object sender, RoutedEventArgs e) 
    { 
     [...] 

     if (step != null) 
     { 

      [...] 

      firePageEvent(); 

     } 

    } 

    public void firePageEvent() 
    { 
     if (UserControlAddStepContent != null) 
     { 
      UserControlAddStepContent(this, EventArgs.Empty); 
     } 
    } 

Parent page

public Violation() 
    { 

     this.InitializeComponent(); 

     StepsBar stepsBar = new StepsBar(); 

     stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 


    } 

    private void addStepContent(object sender, EventArgs e) 
    { 

     CheckBox check_1 = new CheckBox(); 
     check_1.Content = "Check me!"; 
     bodyStackPanel.Children.Add(check_1); 

    } 

Répondre

-1

Résolu. Le problème était le suivant, sur la page parent.

StepsBar stepsBar = new StepsBar(); 

    stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 

L'istance de StepsBar n'a pas été ajoutée à la page. D'OH! Alors, voici ce que je l'ai fait:

stepsBar.UserControlAddStepContent += new EventHandler(addStepContent); 

et sur le XAML de la page parent:

<local:StepsBar x:Name="stepsBar"/> 
-1

Cela suppose que vous souhaitez utiliser un délégué existant plutôt que de faire votre propre et vous ne passez rien spécifique à la page parente par les arguments d'événement.

Dans le code-behind de contrôle utilisateur (adapter si nécessaire sinon en utilisant le code-behind ou C#):

public partial class MyUserControl : System.Web.UI.UserControl 
    { 
     public event EventHandler UserControlButtonClicked; 


    private void OnUserControlButtonClick() 
    { 
     if (UserControlButtonClicked != null) 
     { 
      UserControlButtonClicked(this, EventArgs.Empty); 
     } 
    } 

    protected void TheButton_Click(object sender, EventArgs e) 
    { 
     // .... do stuff then fire off the event 
     OnUserControlButtonClick(); 
    } 

    // .... other code for the user control beyond this point 
} 

Dans la page elle-même vous êtes abonné à l'événement avec quelque chose comme ceci:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // hook up event handler for exposed user control event 
     MyUserControl.UserControlButtonClicked += new 
        EventHandler(MyUserControl_UserControlButtonClicked); 
    } 
    private void MyUserControl_UserControlButtonClicked(object sender, EventArgs e) 
    { 
     // ... do something when event is fired 
    } 

} 
+0

comme je l'ai écrit dans la question, j'utilise l'exemple exact que vous coller, mais au lieu de travail : UserControlButtonClicked 'semble être null! Donc 'UserControlButtonClicked (this, EventArgs.Empty)' dans le si, ne fonctionne pas. –

+0

Je vous ai seulement fourni un exemple qui fonctionne comme prévu et une méthode sur une page parente accessible. –

Questions connexes