CleanAOP实战系列--WPF中MVVM自动更新

CleanAOP实战系列--WPF中MVVM自动更新

作者: 立地
邮箱: [email protected]
QQ:  511363759

CleanAOP介绍:https://github.com/Jarvin-Guan/CleanAOP

前言

讲起WPF,开发模式MVVM是必不可少的,使用MVVM模式以后可以在View中写界面,需要使用到的数据则使用绑定的方式写到标签中,那么控制权就放到了ViewModel中,那么有一个需求是每一个使用MVVM者都会有的,就是在后台改变ViewModel的属性时,同时使前台View绑定的标签内容得到相应更新变动。

定义属性方式对比

  • 传统方式

    private string m_Name = "";
    public string Name
    {
        set
        {
            if(value!=m_Name)
            {
                m_Name = value;
                OnPropertyChanged("Name");
            }
        }
        get { return m_Name; }
    }
    
  • 使用CleanAOP后
    public virtual string Name { set; get; }
    

对比总结:
使用传统方式使用了一大堆累赘的代码,使用CleanAOP后,简单、方便。

实战(使用CleanAOP使属性自动更新)

  1. 下载CleanAOP2.0.0,并且引用dll到项目中。
  2. Notice更新类:
    public class Notice : INotifyPropertyChanged, ICommand
    {
    
    #region [     用于实现绑定的属性基础      ]
    public event PropertyChangedEventHandler PropertyChanged;
    
    public void OnPropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    
    }
    #endregion
    
    #region [     用于实现绑定的命令基础     ]
    public bool CanExecute(object parameter)
    {
        if (this.CanExecuteFunc != null)
        {
            return this.CanExecuteFunc(parameter);
        }
    
        return true;
    
    }
    public event EventHandler CanExecuteChanged;
    
    public void Execute(object parameter)
    {
        if (this.ExecuteAction != null)
        {
            this.ExecuteAction(parameter);
    
        }
    }
    
    public Func<object, bool> CanExecuteFunc { set; get; }
    
    public Action<object> ExecuteAction { set; get; }
    #endregion
    }
    
  3. 定义ViewModel:
    [PropertyNotifyIntercept]//添加属性通知标签,表示该类接入属性通知拦截器。
    //继承Notice
    public class MainWindowVM : Notice
    {
    
        //定义Name属性
        public virtual string Name { set; get; } = "jarvin";
    
    }
    
  4. 界面上绑定该属性
    <TextBox Text="{Binding Name}"></TextBox>
    
  5. 设置DataContext
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = InterceptClassFactory.GetInterceptClass<MainWindowVM>();
    }
    
  6. 修改MainWindowVM的Name的值,这时候界面上会自动做出更新!!

总结

感谢大家使用CleanAOP,使用该方式也可以绑定命令,绑定命令的方式在Demo中会有展示,希望能给大家带来方便。大家可以下载Demo来调试。

时间: 2024-12-26 00:17:20

CleanAOP实战系列--WPF中MVVM自动更新的相关文章

浅析WPF中MVVM模式下命令与委托的关系

??各位朋友大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.最近因为项目上的原因开始接触WPF,或许这样一个在现在来讲显得过时的东西,我猜大家不会有兴趣去了解,可是你不会明白对某些保守的项目来讲,安全性比先进性更为重要,所以当你发现银行这类机构还在使用各种"复古"的软件系统的时候,你应该相信这类东西的确有它们存在的意义.与此同时,你会更加深刻地明白一个道理:技术是否先进性和其流行程度本身并无直接联系.由此我们可以推论出:一项不流行

WinForm应用程序中实现自动更新功能

WinForm应用程序中实现自动更新功能 编写人:左丘文 2015-4-20 近来在给一客户实施ECM系统,但他们使用功能并不是我们ECM制造版提供的标准功能,他们要求对系统作一些定制功能,为了避免因程序的bug而带来频繁让用户更新程序的不良影响,就想给ECM增加一个winform自动更新功能,今天在这里,我想与大家一起分享代码,在此做个小结,以供参考.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧.   1. 首先我们在这里先分析一下其它程序猿的一些基本情况: 相信有许多程序猿都喜欢用Wi

使用Azure Functions 在web 应用中启用自动更新(一)分析基于轮询的 Web 应用的限制

1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vistual Studio 在 Azure 上的部署 ”Azure Functions“应用. 接着上一篇,本篇介绍在 “Azure Functions” 中实现一个函数,该函数仅在 Azure Cosmos DB 中的数据发生变化时运行. 在基于计时器的轮询原型中,无论底层数据是否发生了更改,客户端应用程序都会联

mysql中timestamp自动更新和初始化

1.概述 在我们设计表的时候,考虑将行数据的创建时间和最后更新时间记录下来是很好的实践.尤其是可能需要做数据同步或者对数据新鲜度有要求的表.举些应用场景,更新距上次更新超过2小时的行数据,或者是将一个月前的订单数据归档等等.我们想把这个的需求丢给数据库服务器管理,而不是在应用程序中对每一条语句设置创建时间和最后更新时间字段.在mysql中,这实现起来很容易.我们需要借助于DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 2.简单示例

拒绝卡顿——在WPF中使用多线程更新UI

有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例: ????public partial class MainWindow : Window????{????????public MainWindow()????????{????????????InitializeComponent();????????????this.Dispatcher.Invoke(new Action(()=> { }));????????????this.Loaded

我爱java系列之---【mysql自动更新创建时间和更新时间】

1.所有时间和日期的数据类型: 2.MySQL 脚本实现用例 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE `table_name` ADD COLUMN `CreateTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ; --修改CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE `table_name` MODIFY C

简单的物流项目实战,WPF的MVVM设计模式(三)

往Services文件里面添加接口以及实现接口 IUserService接口 List<User> GetAllUser(); GetUserService类 ConnectToDatabase connect = new ConnectToDatabase(); ConnectObject connectObject = new ConnectObject(); public List<User> GetAllUser() { connectObject.SQLRead = &q

简单的物流项目实战,WPF的MVVM设计模式(四)

接下来写ViewModels 创建运单的ViewModel类 public class CreateExpressWindowViewModel: NotificationObject { private string province; public string Province { get { return province; } set { province = value; this.RaisePropertyChanged("Province"); } } private

MVVM模式解析和在WPF中的实现(一)

MVVM模式简介 MVVM是Model.View.ViewModel的简写,这种模式的引入就是使用ViewModel来降低View和Model的耦合,说是降低View和Model的耦合.也可以说是是降低界面和逻辑的耦合,理想情况下界面和逻辑是完全分离的,单方面更改界面时不需要对逻辑代码改动,同样的逻辑代码更改时也不需要更改界面.同一个ViewModel可以使用完全不用的View进行展示,同一个View也可以使用不同的ViewModel以提供不同的操作. 1.Model Model就是一个clas