当前位置:   article > 正文

Winform中控件与模型MVC

Winform中控件与模型MVC

在Windows Forms (WinForms) 应用程序开发中,用户控件(UserControl)与模型(Model)的结合使用是一种常见的MVC(Model-View-Controller)模式的体现,能够有效地分离界面表示层与业务逻辑层,从而提高代码的可维护性和复用性。本文将通过一个具体的案例——一个简易的“学生信息管理系统”——来阐述如何在WinForms中利用用户控件与模型的配合,实现界面与数据的有效解耦。

一、定义模型(Model)

首先,我们需要定义一个表示学生信息的模型类。这个模型将承载学生的个人信息,如姓名、年龄、性别等。以下是一个简单的Student模型类定义:

 

Csharp

  1. 1public class Student
  2. 2{
  3. 3 public int ID { get; set; }
  4. 4 public string Name { get; set; }
  5. 5 public int Age { get; set; }
  6. 6 public string Gender { get; set; }
  7. 7}
二、创建用户控件(UserControl)

接下来,创建一个名为StudentInfoControl的用户控件,用于展示和编辑学生信息。这个控件将包含几个TextBox用于输入学生的名字、年龄和性别,以及一个Button用于提交修改。

 

Xml

  1. 1<uc:StudentInfoControl x:Class="StudentManagementApp.StudentInfoControl"
  2. 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. 4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5. 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6. 6 xmlns:uc="clr-namespace:StudentManagementApp.Controls"
  7. 7 mc:Ignorable="d"
  8. 8 d:DesignHeight="140" d:DesignWidth="400">
  9. 9 <Grid>
  10. 10 <Label Content="Name:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120"/>
  11. 11 <TextBox x:Name="txtName" HorizontalAlignment="Left" Height="23" Margin="136,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>
  12. 12
  13. 13 <Label Content="Age:" HorizontalAlignment="Left" Margin="10,40,0,0" VerticalAlignment="Top" Width="120"/>
  14. 14 <TextBox x:Name="txtAge" HorizontalAlignment="Left" Height="23" Margin="136,40,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>
  15. 15
  16. 16 <Label Content="Gender:" HorizontalAlignment="Left" Margin="10,70,0,0" VerticalAlignment="Top" Width="120"/>
  17. 17 <TextBox x:Name="txtGender" HorizontalAlignment="Left" Height="23" Margin="136,70,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>
  18. 18
  19. 19 <Button x:Name="btnSave" Content="Save" HorizontalAlignment="Left" Margin="10,100,0,0" VerticalAlignment="Top" Width="75" Click="btnSave_Click"/>
  20. 20 </Grid>
  21. 21</uc:StudentInfoControl>

在C#代码中,我们需要实现事件处理和数据绑定:

 

Csharp

  1. 1public partial class StudentInfoControl : UserControl
  2. 2{
  3. 3 private Student _student;
  4. 4
  5. 5 public StudentInfoControl()
  6. 6 {
  7. 7 InitializeComponent();
  8. 8 this.Loaded += StudentInfoControl_Loaded;
  9. 9 }
  10. 10
  11. 11 private void StudentInfoControl_Loaded(object sender, RoutedEventArgs e)
  12. 12 {
  13. 13 if (_student != null)
  14. 14 {
  15. 15 txtName.Text = _student.Name;
  16. 16 txtAge.Text = _student.Age.ToString();
  17. 17 txtGender.Text = _student.Gender;
  18. 18 }
  19. 19 }
  20. 20
  21. 21 private void btnSave_Click(object sender, RoutedEventArgs e)
  22. 22 {
  23. 23 if (_student != null)
  24. 24 {
  25. 25 _student.Name = txtName.Text;
  26. 26 _student.Age = int.Parse(txtAge.Text);
  27. 27 _student.Gender = txtGender.Text;
  28. 28 // 调用控制器的更新方法
  29. 29 OnStudentUpdated(_student);
  30. 30 }
  31. 31 }
  32. 32
  33. 33 public event EventHandler<Student> StudentUpdated;
  34. 34
  35. 35 protected virtual void OnStudentUpdated(Student student)
  36. 36 {
  37. 37 StudentUpdated?.Invoke(this, student);
  38. 38 }
  39. 39
  40. 40 public void BindStudent(Student student)
  41. 41 {
  42. 42 _student = student;
  43. 43 }
  44. 44}
三、实现控制器(Controller)

在主窗体中,充当控制器的角色,负责实例化模型和用户控件,并处理数据的传递和更新。

 

Csharp

  1. 1public partial class MainForm : Form
  2. 2{
  3. 3 private Student _currentStudent = new Student();
  4. 4
  5. 5 public MainForm()
  6. 6 {
  7. 7 InitializeComponent();
  8. 8 studentInfoControl1.BindStudent(_currentStudent);
  9. 9 }
  10. 10
  11. 11 private void btnSave_Click(object sender, EventArgs e)
  12. 12 {
  13. 13 studentInfoControl1.SaveStudent(_currentStudent);
  14. 14 }
  15. 15}
  16. 16
  17. 17// 在MainForm.cs的设计视图中添加StudentInfoControl
我们可以看到,用户控件与模型的配合使用不仅提高了界面的灵活性和可复用性,同时也清晰地划分了业务逻辑和界面表示的职责,遵循了MVC设计模式的原则。在实际开发中,这种模式尤其适用于那些需要频繁更新和维护的界面组件,能够显著降低代码维护成本,提高开发效率。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/769415
推荐阅读
相关标签
  

闽ICP备14008679号