如何在另一个类中驱动Form事件?

用户名

我希望以下几点:

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

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

这是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();
       }
    }
}

GUI:

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();
    }
}
费德里科·贝拉萨特吉

您不在WPF中使用MVC。您使用Model-View-ViewModel(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();
    }
}

ViewModel:

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.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在按钮单击事件中从另一个类调用方法?

来自分类Dev

如何使一个事件在另一个类中触发

来自分类Dev

如何在另一个类中调用一个类的main()方法?

来自分类Dev

如何在另一个类的红宝石中隐藏一个类

来自分类Dev

如何在一个类中声明另一个类的实例

来自分类Dev

如何在一个类中的另一个函数中更新变量?

来自分类Dev

对另一个类中的事件进行承诺

来自分类Dev

我如何在另一个活动中执行一个类

来自分类Dev

如何与另一个类的Form控件通信?

来自分类Dev

如何在另一个MS图形SDK中获取驱动器的信息

来自分类Dev

如何从另一个事件/类中为整个面板调用无效

来自分类Dev

C#-如何对另一个类中引发的事件做出反应?

来自分类Dev

如何在Java中的另一个类中从主类访问int?

来自分类Dev

如何在类中调用函数以在php中调用另一个类?

来自分类Dev

如何在javascript中的另一个类中实例化类?

来自分类Dev

如何在同一个类的另一个方法中调用一个方法?

来自分类Dev

如何在一个类中从另一个调用一个函数(方法)?

来自分类Dev

如何在另一个类中按类名定位div

来自分类Dev

如何在另一个类中创建导入的类的实例

来自分类Dev

如何在Jframe表单类中调用另一个类?

来自分类Dev

如何在实例化时在新类中创建另一个类的实例?

来自分类Dev

如何在另一个类中创建模拟类的实例

来自分类Dev

如何在我的主类的另一个类中调用方法?

来自分类Dev

如何在一个类中创建方法,在另一个类中操作变量?

来自分类Dev

如何在JavaScript中从另一个类中调用一个类?(初学者的问题)

来自分类Dev

如何在一个类中创建方法,在另一个类中操作变量?

来自分类Dev

您如何在一个类中从另一个类中调用方法?

来自分类Dev

CardLayout:如何在另一个类的ActionListeners中显示一个类中的面板?

来自分类Dev

PHP OOP。如何获取类的常量__METHOD__的值,如何在另一个类中创建另一个类的实例?

Related 相关文章

  1. 1

    如何在按钮单击事件中从另一个类调用方法?

  2. 2

    如何使一个事件在另一个类中触发

  3. 3

    如何在另一个类中调用一个类的main()方法?

  4. 4

    如何在另一个类的红宝石中隐藏一个类

  5. 5

    如何在一个类中声明另一个类的实例

  6. 6

    如何在一个类中的另一个函数中更新变量?

  7. 7

    对另一个类中的事件进行承诺

  8. 8

    我如何在另一个活动中执行一个类

  9. 9

    如何与另一个类的Form控件通信?

  10. 10

    如何在另一个MS图形SDK中获取驱动器的信息

  11. 11

    如何从另一个事件/类中为整个面板调用无效

  12. 12

    C#-如何对另一个类中引发的事件做出反应?

  13. 13

    如何在Java中的另一个类中从主类访问int?

  14. 14

    如何在类中调用函数以在php中调用另一个类?

  15. 15

    如何在javascript中的另一个类中实例化类?

  16. 16

    如何在同一个类的另一个方法中调用一个方法?

  17. 17

    如何在一个类中从另一个调用一个函数(方法)?

  18. 18

    如何在另一个类中按类名定位div

  19. 19

    如何在另一个类中创建导入的类的实例

  20. 20

    如何在Jframe表单类中调用另一个类?

  21. 21

    如何在实例化时在新类中创建另一个类的实例?

  22. 22

    如何在另一个类中创建模拟类的实例

  23. 23

    如何在我的主类的另一个类中调用方法?

  24. 24

    如何在一个类中创建方法,在另一个类中操作变量?

  25. 25

    如何在JavaScript中从另一个类中调用一个类?(初学者的问题)

  26. 26

    如何在一个类中创建方法,在另一个类中操作变量?

  27. 27

    您如何在一个类中从另一个类中调用方法?

  28. 28

    CardLayout:如何在另一个类的ActionListeners中显示一个类中的面板?

  29. 29

    PHP OOP。如何获取类的常量__METHOD__的值,如何在另一个类中创建另一个类的实例?

热门标签

归档