(六)WPF数据驱动模式

news/2024/10/2 13:04:09

 WPF开发方式; MVVM(Model View ViewModel)
1.绑定XAML数据方式
    在 XAML中添加绑定数据和绑定的操作属性
        Content="{Binding MyVar}"

  在XAML对应了的窗体类的构造函数添加数据绑定
        this.DataContext = mainViewModel; //让此页面的数据取MainViewModel对象里去寻找

 

2.实现INotifyPropertyChanged接口更新XAML数据
    因为只在构造函数添加了数据绑定,如果在后续数据变动时则无法更新数据,所以要在MainViewMoel业务逻辑(已经包含数据模型了)中实现INotifyPropertyChanged接口,然后通过委托类型的事件更新绑定字段的数据:

 3.建立CommandBase实现ICommand接口执行按钮动作方法
     建立一个类CommandBase实现ICommand接口:按钮 Command="{Binding ValueCommand}" 行为绑定ValueCommand字段

    class CommandBase : ICommand{public event EventHandler CanExecuteChanged;public bool CanExecute(object parameter){//绑定的这个命令的按钮是否可用return DoCanExecute?.Invoke(parameter) == true;//这里面没有任何执行逻辑,逻辑都被委托Func丢出去了,实例化时传进来含返回值的方法即可
        }public void Execute(object parameter)//parameter是订阅此此接口方法的按钮传递过来的参数
        {DoAction?.Invoke(parameter);//在应用程序主线程上执行指定委托?是Require的缩写?
            }public Action<object> DoAction { get; set; }//定义一个Action<object> 委托类型,委托需要Invoke()执行//那么这个委托在创建CommandBase对象时就可以传递进来一个自定义方法执行了//此类是非静态的,所以所有Control都可以使用public Func<object, bool> DoCanExecute { get;set; }//定义有返回值的委托类型Func}

 

  在实现三个方法同时,自定义一个无返回值的Action委托类型(有返回值的则是Func<>)DoAction,Action<T1,T2,...>参数和传递进来的方法参数对应,属性为空,类为非静态,所以在创建CommandBase对象时就可以通过委托传递进来一个方法。
在业务逻辑类MainViewModel定义ICommand类型字段,在字段封装属性同时创建CommandBase对象,并创建类内DoAction委托将方法传进去给Execute()方法执行,Execute会在绑定ValueCommand字段按钮动作时执行。

  public class MainViewModel:INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;private string myVar="AA";private Brush _valueColor=Brushes.Orange;public Brush ValueColor{get { return _valueColor; }set { _valueColor = value; }}public string MyVar{get { return myVar; }set { myVar = value;PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("MyVar"));//更新绑定此属性的控件
}}//行为绑定处理private ICommand _valueCommand;//定义接口类型的字段,//通过按钮Command属性绑定行为,按钮点击则会触发实现接口类CommandBase中的Execute()方法//通过属性CommandParameter="123"传递参数public ICommand ValueCommand{get {if (_valueCommand == null){_valueCommand = new CommandBase() { DoAction = new Action<object>(ValueCommandAction),DoCanExecute=new Func<object, bool>(CanExcute) };//实例化同时传递方法给委托DoAction在CommandBase中执行,父类引用指向子类对象
                  }return _valueCommand;}set { _valueCommand = value; }}private void ValueCommandAction(object obj){MessageBox.Show("Test");}private bool CanExcute(object obj){return !string.IsNullOrEmpty(MyVar);//判断是否为空
        }}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/67074.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[半成品]群晖cups链接打印机

本文是半成品, 仅提供思路. 不保证能完全成功 (因为我就没成功, USB 识别不了) 本文基于 github 开源项目以及 docker 关闭群晖自带的 cups 群晖是自带 cups, 你只需要把 USB 接口链接打印机后, 即可在控制面板->外接设备, 链接即可 我的由于不知名的原因压根识别不到, 所以…

AI+明厨亮灶解决方案

AI+明厨亮灶解决方案通过AI视觉分析算法,AI+明厨亮灶解决方案可接入现场已有的监控摄像头运行多种主流算法,AI+明厨亮灶解决方案可以对后厨实现如口罩识别、厨师服穿戴、夜间老鼠监测、厨师帽识别、厨师玩手机打电话识别、抽烟识别等。AI+明厨亮灶解决方案通过视频智能分析技…

【Wing】背后的插件们

wing 作为我们日常开发的命令行开发工具,项目开源以来,陆陆续续接入了多个插件,在这里集中分享给大家。wing 作为我们日常开发的命令行开发工具,项目开源以来,陆陆续续接入了多个插件,在这里集中分享给大家。 ☞ Github ☜  ☞ Gitee ☜ 01. wing -screen 作为Android…

Salesforce AI Specialist篇之 Einstein Trust Layer

本篇参考: https://trailhead.salesforce.com/content/learn/trails/drive-productivity-with-einstein-ai https://help.salesforce.com/s/articleView?id=sf.generative_ai_trust_layer.htm&type=5 https://blog.salesforceairesearch.com/meet-salesforces-trusted-ai…

工地人员工装穿戴识别系统

工地人员工装穿戴识别系统通过AI视频智能分析技术,工地人员工装穿戴识别系统可在建筑工地复杂场景下对多个施工作业人员进行高精度识别,工地人员工装穿戴识别系统对施工现场监控区域人员是否佩戴安全帽进行自动识别预警。工地人员工装穿戴识别系统通过AI技术手段,实现了施工…

人员跌倒识别检测系统

人员跌倒识别检测系统通过YOLO网络模型算法,人员跌倒识别检测系统对监控画面区域进行7*24小时自动监测,不需人为干预当人员跌倒识别检测系统监测到现场画面中有人员倒地摔倒时,立即抓拍存档告警同步提醒后台值班人员及时处理。人员跌倒识别检测系统通过AI技术,人员跌倒识别…

工地高空作业安全带穿戴识别系统

工地高空作业安全带穿戴识别系统通过AI视觉分析技术,工地高空作业安全带穿戴识别系统对现场监控画面中施工作业区域的高空作业人员安全绳安全带穿戴进行检测,当检测到作业人员未按要求系安全带作业时,不需人为干预立即触发告警存档,同步通知后台值班人员及时制止。工地高空…

工作-k8s问题处理篇

前言:公司这边为集团,所以项目较多,我目前总负责的项目架构有十六个,其中还有海外项目,不过底下也有一定的细分,同事解决不了的问题会升级到我这,只k8s容器平台常用的就有三种,一种是技术中心部门研发的二开版,一种是国产XC化推广的xc容器平台,还有一种就是开源的-红…