• 【wpf】神器Fody简化属性通知 INotifyPropertyChanged


    前言

    前文中


    【WPF绑定2】 INotifyPropertyChanged Or 依赖属性_code bean的博客-CSDN博客_wpf 通知属性

    介绍了 INotifyPropertyChanged的使用

    1. // 建议数据模型如果要做数据变化通知 ,使用INotifyPropertyChanged
    2. // 使用时是需要实例化的
    3. // DataClass dataClass=new DataClass();
    4. public class DataClass : INotifyPropertyChanged
    5. {
    6. public event PropertyChangedEventHandler PropertyChanged;
    7. private int _value;
    8. public int Value
    9. {
    10. get { return _value; }
    11. set
    12. {
    13. _value = value;
    14. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value"));
    15. }
    16. }
    17. }

    如果属性不多还好,如果属性多了,岂不是要写一堆的代码?此时Fody就登场了。

    Fody的安装

    NuGet 中搜寻Fody,找到如下包,进行安装

    Fody的使用

    首先再类上添加特性[AddINotifyPropertyChangedInterface]

    那么该类下的所有的属性,都会被自动加上属性通知,如果你有特殊的要求,再在特定的属性上加上特殊的特性。

    •           AlsoNotifyFoA     实现通知的时候,同时通知其属性
    •           DoNotNotify 指定不需要通知相关的代码
    •           DependsOn 指定哪些属性变化的时候,通知当前属性变化
    •           DoNotCheckEquality    强制不做旧值比对(默认情况会自动添加比对代码)

    具体如下代码所示:

    1. [AddINotifyPropertyChangedInterface]
    2. public class Data
    3. {
    4. /*
    5. AlsoNotifyFoA 实现通知的时候,同时通知其属性
    6. DoNotNotify 指定不需要通知相关的代码
    7. DependsOn 指定哪些属性变化的时候,通知当前属性变化
    8. DoNotCheckEquality 强制不做旧值比对(默认情况会自动添加比对代码)
    9. */
    10. ///
    11. /// 不加的情况下,做旧值比对后通知
    12. ///
    13. public int LinkCount { get; set; } = 0;
    14. public int ErrCount { get; set; } = 0;
    15. public int Count { get; set; } = 0;
    16. #region 举例说明
    17. ///
    18. /// DoNotNotify 指定不需要通知相关的代码
    19. ///
    20. [DoNotNotify]
    21. public int Test { get; set; }
    22. ///
    23. /// DependsOn 指定哪些属性变化的时候,通知当前属性变化
    24. /// 及当属性Test发生变化时,Test1触发属性通知
    25. ///
    26. [DependsOn("Test")]
    27. public int Test1 { get; set; }
    28. ///
    29. /// 实现通知的时候,同时通知其属性
    30. /// Test2实现通知的时候,同时通知Test
    31. ///
    32. [AlsoNotifyFor("Test")]
    33. public int Test2 { get; set; }
    34. ///
    35. /// DoNotCheckEquality 强制不做旧值比对(默认情况会自动添加比对代码,即数值没有发生改变时不通知)
    36. /// 加上后只要有个属性访问就会通知,不管值是否变化
    37. ///
    38. [DoNotCheckEquality]
    39. public int Test3 { get; set; }
    40. #endregion
    41. }

    之后加入MVVM框架之后,应该可以替代掉Fody。

  • 相关阅读:
    读高性能MySQL(第4版)笔记19_云端和合规性
    Py之trl:trl(一款采用强化学习训练Transformer语言模型和稳定扩散模型的全栈库)的简介、安装、使用方法之详细攻略
    opencv 直方图比较
    CM72 另类加法
    产品经理基础--06产品设计规范
    Leetcode 386. 字典序排数
    成都瀚网科技有限公司抖音带货靠谱么
    计算机竞赛 深度学习YOLOv5车辆颜色识别检测 - python opencv
    Ansible的脚本——playbook 剧本
    LeetCode每日一题——764. 最大加号标志
  • 原文地址:https://blog.csdn.net/songhuangong123/article/details/126311081