Winform像Wpf MVVM那样进行界面数据绑定

Winform的界面数据绑定需要手动绑定,比如下面的代码:

        Model model;
        public Form1()
        {
            InitializeComponent();
            model = new Model();
            label1.DataBindings.Add("Text", model, "ID");
            ListBox lb = new ListBox();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            model.ID = DateTime.Now.ToString("mm:ss");
        }

Model的实现:

    class Model: INotifyPropertyChanged
    {
        public string ID { set; get; }
        public string Name { set; get; }
        public event PropertyChangedEventHandler PropertyChanged;
    }

实体类像wpf那样,仍然需要实现INotifyPropertyChanged,这里你可以自己去实现,也可以使用PropertyChanged.Fody这样一个AOP框架。这里我用的是Fody,也就是说如果你的Model继承了接口PropertyChanged,那么Fody就会自动帮你生成属性变更通知代码。如果你不知道怎么使用,可以参考下这个项目的git官方项目页面:https://github.com/Fody/PropertyChanged

如果你没有用Fody,那么你的Model应该这么写:

    public class Model: INotifyPropertyChanged
    {
        private string id;
        private string name;

        public string ID {
            get => id;
            set
            {
                id = value;
                OnPropertyChanged("ID");
            }
        }
        public string Name
        {
            get => name;
            set
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

当然这里有许多地方可以完善,比如做一下检查,如果没有变更,则不通知,把OnPropertyChanged放到一个父类里面,所有的model都继承这个父类。

Add方法有几个重载方法,它同时可以设置绑定格式:

label1.DataBindings.Add(
"Text",model,"Time",
updateMode:DataSourceUpdateMode.OnPropertyChanged, 
formattingEnabled: true, 
nullValue:null,formatString:"yyyy/MM");

c#里如果你在传参的时候指定了参数名,那么你的参数可以不用按照顺序填写,就像我上面的代码这样。

wpf里面可以控制绑定方向,即双向&#x

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
WPF MVVM框架是一种基于WPF的架构设计模式,它结合了MVP模式与WPF的特性。MVVM是Model-View-ViewModel的简写,它通过利用WPF数据绑定机制来降低XAML文件和CS文件的耦合度,使UI显示和逻辑代码的耦合度最小化。与传统WinForm开发相比,WPF MVVM框架使用数据绑定来更新UI,并使用命令绑定的方式来处理用户操作,从而降低了耦合度。 在WPF开发中,MVVM框架充分利用了WPF的技术特性,如绑定、依赖属性、路由事件、命令、数据模板和控制模板等。这些特性使得WPF应用的UI层更加细节化和可定制化。MVVM框架主要由三个部分组成:模型(Model)、视图(View)和视图模型(ViewModel)。模型负责表示业务数据,视图负责展示用户界面,而视图模型是连接模型和视图的桥梁,它通过数据绑定将模型的数据传递给视图,并将视图的用户操作反馈给模型。 使用WPF MVVM框架可以使开发者更加高效地开发复杂的WPF应用,通过将UI和业务逻辑分离,使得代码更加可维护和可测试。此外,MVVM框架也提供了一种良好的团队开发方式,使得开发人员可以专注于各自的领域,提高了开发效率和质量。 总之,WPF MVVM框架是一种在WPF开发中广泛应用的架构模式,它通过数据绑定和命令绑定的方式来降低UI和逻辑代码的耦合度,提高了开发效率和代码质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [WPF基础系列六:MVVM框架](https://blog.csdn.net/iceberg7012/article/details/115490073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值