2012-06-26 13 views
7

Ho un controllo utente con diversi pulsanti, che devono intraprendere azioni diverse a seconda della classe che lo utilizza.Gestione degli eventi del controllo utente WPF

Il problema è che non so come implementare questi gestori perché quando utilizzo il mio controllo utente dall'app finale non ho accesso diretto ai pulsanti per specificare quale gestore gestisce quali eventi.

Come lo faresti?

risposta

16

Un altro modo per farlo è quello di esporre gli eventi attraverso gli eventi nella tua UserControl:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 


    public event RoutedEventHandler Button1Click; 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     if (Button1Click != null) Button1Click(sender, e);  
    } 
} 

Ciò dà al vostro usercontrol un evento Button1Click che si aggancia a quel pulsante all'interno del vostro controllo.

+0

Grazie a entrambi, quelle sembrano soluzioni carine. Ci sono altre alternative? –

4

Vorrei creare un comando per ogni pulsante e delegare per ogni "gestore". Quindi puoi esporre i delegati all'utente (app finale) e chiamarli internamente sul metodo Execute() sui comandi. Qualcosa del genere:

public class MyControl : UserControl { 
     public ICommand FirstButtonCommand { 
      get; 
      set; 
     } 
     public ICommand SecondButtonCommand { 
      get; 
      set; 
     } 
     public Action OnExecuteFirst { 
      get; 
      set; 
     } 
     public Action OnExecuteSecond { 
      get; 
      set; 
     } 

     public MyControl() { 
      FirstButtonCommand = new MyCommand(OnExecuteFirst); 
      FirstButtonCommand = new MyCommand(OnExecuteSecond); 
     } 
    } 

Di cource, "MyCommand" deve implementare ICommand. È inoltre necessario associare i comandi ai pulsanti corrispondenti. Spero che questo ti aiuti.

Problemi correlati