2

我渴望以下:

当单击表单上的按钮时,我要处理的事件是另一个类。因此,表单只包含控件。

这几乎就像一个 MVC 模式:控制器我有一个类,还有一个类 RegistrarTrabajador (Model)。当控制器检测到表单的事件时,将任务传递给模型。

这里是 Controller 类和表单:

控制器:

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 trabajador = new Trabajador();
           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();
       }
    }
}

图形用户界面:

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)
    {
        controlador.btnRegistrar_Click(controlador,new RoutedEventArgs());
        controlador.btnNuevo_Click(controlador,new RoutedEventArgs());
        controlador.btnSalir_Click(controlador,new RoutedEventArgs());
    }

    public void clean()
    {
        txtPrimerNombre.Clear();
        txtSegundoNombre.Clear();
        txtPrimerApellido.Clear();
        txtSegundoApellido.Clear();
        txtFechaNacimiento.Clear();
        cboRangoTrabajador.SelectedItem = "Administrador";
        txtPrimerNombre.Focus();
    }
}
4

2 回答 2

0

您不在 WPF 中使用 MVC。您使用模型-视图-视图模型 (MVVM)

您不会在 WPF 的过程代码中创建或操作 UI 元素。这就是 XAML 的用途。请阅读有关DataBinding的信息,

像这样的事情:

trabajador.setPrimerNombre(vista.txtPrimerNombre.Text);
trabajador.setSegundoNombre(vista.txtSegundoNombre.Text);

太可怕了,永远不应该在 WPF 中完成。


此外,您的代码闻起来像蹩脚的 java。而不是像setPrimerNombre()你这样的方法真的应该使用Properties。WPF 支持对属性进行两种数据绑定,因此您无需手动完成所有这些管道。


为了说明这一点,这里有一个小例子:

XAML:

<StackPanel>
  <TextBox Text="{Binding Model.LastName}"/>
  <TextBox Text="{Binding Model.FirstName}"/>
  <Button Content="Registrar" Click="Registrar_Click"/>
  <Button Content="Clear" Click="Clear_Click"/>
</StackPanel>

代码背后:

public class MainWindow: Window
{
    public MainViewModel ViewModel { get { return DataContext as MainViewModel; } }

    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainViewModel();
    }

    public void Registrar_Click(object sender, RoutedEventArgs e)
    {
        ViewModel.Registrar();
    }

    public void Clear_Click(object sender, RoutedEventArgs e)
    {
        ViewModel.Clear();
    }
}

视图模型:

public class MainViewModel: ViewModelBase //You should have some ViewModelBase implementing INotifyPropertyChanged, etc
{
    private Trabajador _model;
    public Trabajador Model
    {
        get { return _model; }
        set
        {
           _model = value;
           NotifyPropertyChange("Model");
        }
    }

    public void Registrar()
    {
       DataAccessLayer.Registrar(Model);
    }

    public void Clear()
    {
       Model = new Trabajador();
    }
}

模型:

public class Trabajador: ModelBase //ModelBase Should also implement INotifyPropertyChanged
{
    private string _lastName;
    public string LastName
    {
        get { return _lastName; }
        set
        {
            _lastName = value;
            NotifyPropertyChanged("LastName");
        }
    }

    private string _firstName;
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            _firstName = value;
            NotifyPropertyChanged("FirstName");
        }
    }

    //... And so on.
}
于 2013-10-22T23:07:36.030 回答
0

不确定是否完全理解您的意思,但我想您想知道它是分层构建 WPF 应用程序的最佳方式。

如果这是正确的,那么 MVVM 模式绝对是您正在寻找的。这是一个很好的链接,可以帮助您了解它的工作原理并开始使用它!

于 2013-10-22T23:07:59.790 回答