網站首頁 編程語言 正文
INotifyPropertyChanged:
該接口包含一個事件, 針對屬性發生變更時, 執行該事件發生。
// // 摘要: // 通知客戶端屬性值已更改。 public interface INotifyPropertyChanged { // // 摘要: // 在屬性值更改時發生。 event PropertyChangedEventHandler PropertyChanged; }
接下來, 用一個簡單的示例說明其簡單使用方法(大部分常用的做法演示):
1.定義一個ViewModelBase 繼承INotifyPropertyChanged 接口, 添加一個虛函數用于繼承子類的屬性進行更改通知
2.MainViewModel中兩個屬性, Code,Name 進行了Set更改時候的調用通知,
public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public class MainViewModel : ViewModelBase { private string name; private string code; public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } } public string Code { get { return code; } set { code = value; OnPropertyChanged("Code"); } } }
正如上面的代碼, 應該注意到了, 每個屬性調用OnPropertyChanged的時候, 都需要傳一個自己的屬性名, 這樣是不是很多余?對, 很多余。
改造
看到有些文章給基類的參數修改為表達式樹, 這樣實現的時候,傳遞一個Lambda表達式, 我覺得這是不治標不治本嗎?如下:
說明: 原來直接傳遞一個固定的string類型實參, 不說換成lambda的性能問題, 同樣帶來的問題你還是固定的需要去書寫這個參數。 不建議這么做!
CallerMemberName
該類繼承與 Attribute, 不難看出, 該類屬于定義在方法和屬性上的一種特效類, 實現該特性允許獲取方法調用方的方法或屬性名稱
// // 摘要: // 允許獲取方法調用方的方法或屬性名稱。 [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] public sealed class CallerMemberNameAttribute : Attribute { // // 摘要: // 初始化 System.Runtime.CompilerServices.CallerMemberNameAttribute 類的新實例。 public CallerMemberNameAttribute(); }
改造ViewModelBase:
改造之后, 是不是發現明顯區別:
不用傳遞參數, 不用書寫lambda表達式, 也不用擔心其傳遞的參數安全, 直接根據讀取屬性名!
原文鏈接:https://www.cnblogs.com/zh7791/p/9933954.html
相關推薦
- 2023-05-29 React優雅的封裝SvgIcon組件示例_React
- 2023-02-06 C#實現對文件進行加密保護的示例代碼_C#教程
- 2023-01-09 Android自定義ViewGroup實現九宮格布局_Android
- 2022-11-07 go?分布式鎖簡單實現實例詳解_Golang
- 2022-05-10 Element-ui 中<template slot-scope=“scope“> 的用法問題以及剖
- 2021-12-12 七大經典排序算法圖解_C 語言
- 2022-07-15 Python打印數據類型的全過程_python
- 2022-08-17 python運行腳本文件的三種方法實例_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支