Este es mi primer programita en C#, y la verdad no entiendo muchas cosas. Espero me puedan echar un cable

El programita es sencillo, solo registrará los datos de un trabajador en una tabla. Tengo las siguientes clases:
- Clase Trabajador (pojo). Este será el prototipo del trabajador, todos se crearán a partir de esta pojo.
- Clase MainWindow (Formulario)
- Clase Controller (Controlador del programa)
- Clase RegistrarTrabajador (Modelo del programa)
- Clase Conexion (Complemento del Modelo).
La idea es sencilla, estoy utilizando el patrón MVC, para conectar el Controlador con la vista y con el modelo. Ahora, el problema que tengo es el siguiente:
En Java, basta con pasarse la referencia del Controlador, al componente que efectuará el evento. bastaría con hacer:
Código
Luego, en la clase Controller:
public void setControlador(Controller controlador) { btnRegistrar.addActionListener(controlador); btnNuevo.addActionListener(controlador); btnSalir.addActionListener(controlador); }
Código
private Formulario vista; private Modelo modelo; public Controller (Formulario vista, Modelo modelo) { this.vista = vista; this.modelo = modelo; } @Override { // eventos } }
¿Cómo puedo lograr lo mismo en C#?
Clases Trabajador (Pojo), Controller (Controlador), RegistrarTrabajador (Modelo), Formulario :
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RegistroDeUsuarios.pojo { public class Trabajador { private string primerNombre; private string segundoNombre; private string primerApellido; private string segundoApellido; private string rangoTrabajador; private string fechaNacimiento; // setters public void setPrimerNombre(string primerNombre) { this.primerNombre = primerNombre; } public void setSegundoNombre(string segundoNombre) { this.segundoNombre = segundoNombre; } public void setPrimerApellido(string primerApellido) { this.primerApellido = primerApellido; } public void setSegundoApellido(string segundoApellido) { this.segundoApellido = segundoApellido; } public void setRangoTrabajador(string rangoTrabajador) { this.rangoTrabajador = rangoTrabajador; } public void setFechaNacimiento(string fechaNacimiento) { this.fechaNacimiento = fechaNacimiento; } // getters public string getPrimerNombre() { return this.primerNombre; } public string getSegundoNombre() { return this.segundoNombre; } public string getPrimerApellido() { return this.primerApellido; } public string getSegundoApellido() { return this.segundoApellido; } public string getRangoTrabajador() { return this.rangoTrabajador; } public string getFechaNacimiento() { return this.fechaNacimiento; } } }
Clase Controller
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using RegistroDeUsuarios.pojo; namespace RegistroDeUsuarios { public class Controller { private MainWindow vista; private RegistrarTrabajador modelo; public Controller() { } public Controller(MainWindow vista, RegistrarTrabajador modelo) { this.vista = vista; this.modelo = modelo; } public void btnRegistrar_Click(Object sender, RoutedEventArgs e) { trabajador.setPrimerNombre(vista.txtPrimerNombre.Text); trabajador.setSegundoNombre(vista.txtSegundoNombre.Text); trabajador.setPrimerApellido(vista.txtPrimerApellido.Text); trabajador.setSegundoApellido(vista.txtSegundoApellido.Text); trabajador.setRangoTrabajador(vista.cboRangoTrabajador.SelectedItem.ToString()); trabajador.setFechaNacimiento(vista.txtFechaNacimiento.Text); modelo.registrarTrabajador(trabajador); } public void btnNuevo_Click(Object sender, RoutedEventArgs e) { vista.clean(); } public void btnSalir_Click(Object sender, RoutedEventArgs e) { //Application.Current.Shutdown(); } } }
Clase RegistrarTrabajador:
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using RegistroDeUsuarios.pojo; namespace RegistroDeUsuarios { public class RegistrarTrabajador { public static string CadenaDeConexion; public void registrarTrabajador(Trabajador trabajador) { // Aquí se llevara a cabo la conexion CadenaDeConexion = "Server=localhost;" + "Port=3307;" + "Database=mysql_ifxperu;" + "Uid=root;" + "Password="; try { conexion.ConnectionString = CadenaDeConexion; } catch (Exception ex) { Console.WriteLine(ex.Message); } try { // Abrimos la conexión conexion.Open(); // Definimos nuestro Query string query = "insert into empleados VALUES('"+trabajador.getPrimerNombre()+"','"+trabajador.getSegundoNombre()+"','"+trabajador.getSegundoApellido()+"','"+ trabajador.getSegundoApellido()+"','"+trabajador.getRangoTrabajador()+"','"+trabajador.getFechaNacimiento()+"')"; // Establecemos cuál será la conexión comando.Connection = conexion; // Determinamos el comando [ nuestro query] comando.CommandText = query; //Se le asigna la consulta // Asignamos al objeto MySqlReader la ejecución del comando // En otras palabras, el resultado de la consulta [query] // Se guardará en el MySqlReader comando.ExecuteNonQuery(); MessageBox.Show("Alta del empleado satisfactoria."); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conexion.Close(); } } } }
Clase Formulario
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace RegistroDeUsuarios { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); cboRangoTrabajador.Items.Add("Administrador"); cboRangoTrabajador.Items.Add("Vendedor"); cboRangoTrabajador.Items.Add("Contador"); cboRangoTrabajador.Items.Add("Tecnico Mantenimiento"); cboRangoTrabajador.Items.Add("Programador"); cboRangoTrabajador.Items.Add("Analista"); cboRangoTrabajador.SelectedIndex = 0; } public void setControlador(Controller controlador) { } public void clean() { txtPrimerNombre.Clear(); txtSegundoNombre.Clear(); txtPrimerApellido.Clear(); txtSegundoApellido.Clear(); txtFechaNacimiento.Clear(); cboRangoTrabajador.SelectedItem = "Administrador"; txtPrimerNombre.Focus(); } } }
*** UPDATE ***
He creado una clase principal, que sustituye al Main que genera WPF.
Código
using System.Windows.Media.Imaging; using System.Windows.Media.Media3D; using System.Windows.Media.TextFormatting; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Shell; namespace RegistroDeUsuarios { class Principal { // <summary> /// Application Entry Point. /// </summary> [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] public static void Main() { vista.setControlador(control); MessageBox.Show("Hola"); app.InitializeComponent(); app.Run(); } } }
Otra duda, quiero colocar un método en el Formulario, para arrancar la aplicación a demanda. Esto porque en el Main crearé los objetos MainWindow y RegistrarTrabajador, para pasárselos al Controller, para que se asocie a las 2 clases, y el objeto Controller pasárselo por medio de setControlador(Controller controlador) al Formulario. ¿Cómo haría?
Muchas gracias!