2012-06-26 21 views
7

Tengo un control de usuario con varios botones, que deben tomar diferentes acciones dependiendo de la clase que lo use.Manejo de eventos de WPF User Control

El problema es que no sé cómo implementar esos controladores porque cuando uso mi control de usuario desde la aplicación final no tengo acceso directo a los botones para especificar qué manejador maneja qué eventos.

¿Cómo harías eso?

Respuesta

16

Otra manera de hacer esto es exponer los eventos a través de eventos en su control de usuario:

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

Esto da a su usercontrol un evento Button1Click que se conecta a ese botón dentro de su control.

+0

Gracias a ambos, esas parecen buenas soluciones. ¿Hay más alternativas? –

4

Crearía un comando para cada botón y lo delegaría para cada "controlador". De lo que puede exponer delegados al usuario (aplicación final) y llamarlos internamente en el método Execute() en los comandos. Algo como esto:

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

De cource, "MyCommand" necesita implementar ICommand. También debe vincular sus comandos a los botones correspondientes. Espero que esto ayude.