winform 实现 MVVM框架

84 篇文章 3 订阅

ViewModel:

public class UserModel : BindableBase
{
        private int id= 0;
        private string name = string.Empty;
        private string address = string.Empty;
        

        /// <summary>
        /// Id
        /// </summary>
        public int Id { get => id; set => SetProperty(ref id, value); }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get => name; set => SetProperty(ref name, value); }

        /// <summary>
        /// 地址
        /// </summary>
        public string Address { get => address; set => SetProperty(ref address, value); }

}
public abstract class BindableBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected bool SetProperty<T>(ref T field, T newValue, [CallerMemberName] string propertyName = null)
    {
        if (!EqualityComparer<T>.Default.Equals(field, newValue))
        {
            field = newValue;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));   
            return true;
        }
        return false;
    }
}

View:

public partial class Form1 : Form
{
        private UserModel VMUserModel;
        public Form1()
        {
            VMUserModel = new UserModel()
            {
                Num = 0,
                Name = "",
                Birthday = "",
                Age = 0,
                Address = ""
            };
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            List<Control> list = GetAllControl(this);
            var propes = VMUserModel.GetType().GetProperties();
            //textBox3.DataBindings.Add(new Binding("Text", VMUserModel, "Num"));
            foreach (Control item in list)
            {
                var prop = propes.FirstOrDefault(a => item.Tag != null && a.Name == item.Tag.ToString());
                if (prop != null)
                {
                    if (item is Label) item.DataBindings.Add(new Binding("Text", VMUserModel, prop.Name));
                    if (item is TextBox) item.DataBindings.Add(new Binding("Text", VMUserModel, prop.Name));
                    if (item is CheckBox) item.DataBindings.Add(new Binding("Checked", VMUserModel, prop.Name));
                    if (item is ComboBox) item.DataBindings.Add(new Binding("SelectedItem", VMUserModel, prop.Name));
                }
            }

        }

        public List<Control> GetAllControl(Control ctl)
        {
            List<Control> result = new List<Control>();
            if (ctl.HasChildren)
            {
                if (!(ctl is Form)) result.Add(ctl);
                foreach (Control item in ctl.Controls)
                {
                    result.AddRange(GetAllControl(item));
                }
            }
            else
            {
                result.Add(ctl);
            }
            return result;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(JsonConvert.SerializeObject(VMUserModel));
        }
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: WinForm MVVM是一种在Windows Forms应用程序中使用Model-View-ViewModel设计模式的方法。MVVM模式将应用程序的逻辑与用户界面分离,并提供了一种可维护和可测试的架构。 在WinForm MVVM中,Model是应用程序的数据和业务逻辑。它可以是数据库、网络服务或其他数据源,负责获取、更新和保存数据。ViewModel是View(用户界面)与Model之间的中介。它将Model中的数据转换为View可以显示的格式,并处理来自View的用户交互事件。它还可以包含一些与用户界面无关的业务逻辑。View负责显示ViewModel提供的数据,并将用户的操作反馈到ViewModel。 在实现WinForm MVVM时,我们首先需要设计和创建Model,包括定义数据结构和业务逻辑。接下来,我们创建View,即用户界面,并将其绑定到相应的ViewModel。在View中,我们使用数据绑定和命令绑定来连接View和ViewModel。数据绑定可以使View自动更新和显示ViewModel中的数据,命令绑定可以将用户的操作与ViewModel中的方法关联起来。 在ViewModel中,我们实现属性和命令,处理来自View的数据绑定和命令绑定。我们还可以使用INotifyPropertyChanged接口通知View属性的更改,实现双向数据绑定。ViewModel中的业务逻辑可以在View中进行单元测试,提高代码的可测试性。 总之,WinForm MVVM是一种用于在Windows Forms应用程序中实现可维护、可测试的架构的方法。它将应用程序的逻辑与用户界面分离,并使用数据绑定和命令绑定实现View和ViewModel之间的通信。通过使用MVVM,我们可以更好地组织和管理代码,并提供更好的用户体验。 ### 回答2: WinForm是微软的一种桌面应用程序开发框架,而MVVM则是一种软件架构模式。WinForm MVVM是将MVVM模式应用在WinForm开发中。 MVVM模式包含三个主要组件:视图(View),视图模型(ViewModel)和模型(Model)。在WinForm MVVM中,视图对应于WinForm窗体和控件,视图模型负责处理视图和模型之间的交互,而模型则是应用程序的数据和业务逻辑的表示。 WinForm MVVM的优点有: 1. 分离界面逻辑和业务逻辑:通过MVVM模式,将界面逻辑和业务逻辑分离开来,使代码更加模块化和可维护。 2. 可测试性:视图模型中的逻辑可以通过单元测试进行测试,保证程序的质量。 3. 提高开发效率:通过数据绑定等技术,可以降低开发的复杂性,减少代码量,提高开发效率。 4. 支持可扩展性:由于MVVM的低耦合性,可以很容易地进行功能的扩展和修改。 WinForm MVVM实现可以使用一些第三方框架,如DevExpress、Telerik等,它们提供了一些用于实现MVVM模式的扩展和工具。通过这些框架,可以更方便地在WinForm实现MVVM模式,提高开发效率。 总之,WinForm MVVM是将MVVM模式应用在WinForm开发中,通过分离界面逻辑和业务逻辑,提高开发效率和可测试性,并支持可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijingguang

有钱捧个钱场,没钱捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值