属性的使用... INotifyPropertyChanged

2023-11-24

这只是我在学习属性时想到的事情,而且我太多地使用了 INotifyPropertyChanged,这只是一个想法,我想听听一些关于它的意见。(我知道这需要在编译器上做一些工作,而不是在消费者方面)

由于 INotifyPropertyChanged 大多数时候都与相同的模式一起使用..就像调用使用属性名称触发事件的方法一样,是否可以将其设计为属性并使用自动属性?这样编译器就知道需要添加对 PropertyChanged 事件的调用吗? 所以如果我们有课的话......

public class DemoCustomer : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

  private string companyNameValue = String.Empty;
         ...
}

而不是申报财产

public string CompanyName
    {
        get
        {
            return this.companyNameValue;
        }

        set
        {
                       if (value != this.companyNameValue)
                       {
                          this.companyNameValue = value;
                          NotifyPropertyChanged("CompanyName");
                       }
        }
    }

如果我们可以通过此属性向编译器指示,如果新值与之前的值不同,则需要使用属性名称生成对 PropertyChanged 的​​调用,那么我们可以执行类似的操作

[NotifyPropertyChanged]
public string CompanyName
{
  get;set;
}

当不使用属性时,我们仍然可以以旧的方式对某些自定义行为进行编码。


如果有人遇到此线程并且正在使用 C# 5(VS 2012+、.NET 4.5+)。这种情况现在可以“更容易”完成CallerMemberNameAttribute。此属性应用于字符串参数,并导致编译器在使用默认值时(即未传递参数时)传递调用方法/属性的名称。制定实施INotifyPropertyChanged不那么无聊。例如:

public class MyClass
{
    private string myProperty;

    public string MyProperty
    {
        get { return myProperty; }
        set
        {
            myProperty = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

所以,你只需要OnPropertyChanged()在每个 setter 中发送事件,而不必处理属性名称的硬编码字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

属性的使用... INotifyPropertyChanged 的相关文章

  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • 每个元素的 asp.net Web 表单自定义错误消息

    我创建了一个 Web 应用程序 表单 以及后端 SQL 插入和查询 目前我正在显示所有用户错误消息 div style padding 1em div
  • 如何使用Entity Framework Code First CTP 5存储图像?

    我只是想弄清楚是否有一种简单的方法可以使用 EF Code First CTP 5 存储和检索二进制 文件 数据 我真的很希望它使用 FILESTREAM 类型 但我真的只是在寻找某种方法让它工作 我总是创建另一个类 例如ProductIm
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • Windows Phone 的 JSON 反序列化

    我正在尝试反序列化以下 JSON 但我真的不知道如何使用 JSON net 来完成这项工作 我正在使用 C 和 JSON Net 库 我的 JSON 如下 found 3 bounds 43 54919 172 62148 43 54487
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 尝试后终于没有被调用

    由于某种原因 在我的控制台应用程序中 我无法运行我的finally 块 我编写这段代码是为了测试finally块是如何工作的 所以它非常简单 static void Main int i 0 try int j 1 i Generate a
  • C++ 中的析构函数

    我的 AB h 文件中有一个构造函数 class AB private int i public AB i 0 constructor AB i 0 destructor virtual void methodA unsigned int
  • 将同步 zip 操作转换为异步

    我们有一个现有的库 其中一些方法需要转换为异步方法 但是我不确定如何使用以下方法执行此操作 错误处理已被删除 该方法的目的是压缩文件并将其保存到磁盘 请注意 zip 类不公开任何异步方法 public static bool ZipAndS

随机推荐

  • 解释 Haskell 中的类型类

    我是一名 C Java 程序员 我在日常编程中碰巧使用的主要范例是 OOP 在某些线程中 我读到一条评论说 Type 类本质上比 OOP 更直观 有人可以用简单的语言解释类型类的概念 以便像我这样的 OOP 人员能够理解它吗 首先 我总是对
  • ExtJs手动触发Click事件,按钮参数与鼠标单击不同

    所以 我有一个登录控制器 你可以用鼠标单击登录或按 Enter 键 如下所示 Ext define My controller Login extend Ext app Controller init function applicatio
  • 使用节点将Token保存在本地存储中

    我正在使用智威汤逊 jsonwebtoken 5 4 0 与快递4和翡翠 我能够创建正确的令牌 但是如何在每次调用中传递此令牌 我必须在哪里存储这个令牌 在标头中还是在本地存储中 现在我将 CURL 与 Postman 一起使用 并在标头中
  • 有什么方法可以知道 Jersey @__Param fromString 处理程序中正在解析哪个参数?

    我正在使用的 API 决定接受 UUID 作为 Base32 编码字符串 而不是标准的十六进制 破折号分隔的格式UUID fromString 期望 这意味着我不能简单地写 QueryParam UUID myUuid作为方法参数 因为转换
  • 从多个位置创建脚本包

    假设我们的应用程序处于离线状态 即我们无法使用第 3 方 CDN 因此我们正在创建自己的 CDN 我想将所有供应商脚本托管在一个单独的 父级 Web 应用程序中 然后将它们包含在其他几个 MVC 应用程序的捆绑包中 e g http loc
  • 达到 MaximumFileSize 时的 log4net 滚动文件附加器文件名格式

    我们使用 log4net 滚动文件附加器 并且对日志文件有以下要求 每天开始时的新日志文件 文件名中包含日期 最大日志文件大小为 500KB 我们遇到的问题是当文件达到 500KB 时的文件命名策略 它们被重命名为 1后缀 这是有问题的 因
  • 以编程方式启用/禁用连接

    在 Windows 7 上 我可以通过网络连接管理器面板 在系统设置中 启用和禁用连接 我如何在 C 中以编程方式执行此操作 谢谢 您可以通过利用 WMI 和 Win32 NetworkAdapter WMI 类在 C 中实现此目的 Win
  • 为什么变异风格被弃用?

    0 13 和 0 14 中的文档都警告说变异样式已被弃用 但没有提及原因 不推荐在渲染之间重用和改变样式对象 如果我想对基于 css 类的动画无法处理的元素执行依赖于状态的动画 我该怎么办 每次都克隆对象 新反应 非常感谢帮助和建议 您可以
  • Python位置,显示距最近其他位置的距离

    我是数据框中的一个位置 位于经纬度列名称下方 我想在单独的数据框中显示距离最近火车站的经纬度有多远 例如 我有一个经纬度 37 814563 144 970267 并且我有一个其他地理空间点的列表如下 我想找到最近的点 然后找到这些点之间的
  • 悬停子元素时如何设置父元素的样式?

    我知道不存在CSS 父选择器 但是在没有这样的选择器的情况下悬停子元素时是否可以设置父元素的样式 举个例子 考虑一个删除按钮悬停时将突出显示即将删除的元素 div p Lorem ipsum p div
  • 为什么 SimpleXML 在使用时将我的数组更改为数组的第一个元素?

    这是我的代码 string lt lt
  • 使用 XSLT 创建带有嵌套粗体/斜体标签的 XSL-FO

    我正在创建 xslt 文件 它将我的 xml 转换为 xsl fo XML 是这样的
  • 如何自动配置 Eclipse?

    从事项目的团队往往需要 Eclipse 的通用配置 这包括通用配置和项目特定配置 例如 一般来说 每个人都可能希望共享缩进 某些插件的安装 例如 m2eclipse testng egit Spring 支持 此外 对于一个项目 您可能需要
  • 为需要另一个扩展的 Python 进行 C 扩展

    我有几个 Python 函数 可以用来让 Pygame 的游戏开发变得更容易 我将它们放在 Python 路径中名为 helper py 的文件中 这样我就可以从我制作的任何游戏中导入它们 我想 作为学习 Python 扩展的练习 将此模块
  • 使用纯云 Azure Active Directory 进行 SQL Azure 集成身份验证失败

    我已经创建了 Azure 租赁并配置了以下内容 Azure AD 具有 简单的自定义域名 少于 15 个字符 DNS 验证等一切都很好 用户和管理员组 两个组中的用户 VNET DNS 和 IP 地址 启用设备管理 启用域服务并连接到 VN
  • Twitter API 在 XAMPP 上返回 NULL

    我正在尝试调用 Twitter API 简而言之 我的问题与描述的相同here 我接到电话NULL on a var dump 结果 However cURL 工作正常 我已经包含了最新版本的twitter api php脚本和所有令牌 密
  • 如何从输入类型文件多个中删除特定文件?

    我正在使用多个输入类型文件来更新一些图片 上传之前 页面会显示每张图片的缩影 我想为每张图片添加一个删除链接 当用户单击时 图片就会消失 文件也会从输入中删除 我尝试使用下面的代码 HTML
  • 理解封装和抽象的简单方法

    学习 OOP 概念特别有兴趣深入理解抽象和封装 已经查看了下面的内容 抽象VS信息隐藏VS封装 抽象和封装之间的区别 我发现如果没有真实且简单的示例类 代码片段 很难理解这些概念 我的一位同事说抽象只不过是创造抽象 类和用范围保护其成员变量
  • 在 Windows Phone 8.1 上获取 CivicAddress

    我正在尝试从 Windows Phone 8 1 中的地理位置获取 CivicAddress 我尝试使用以下代码 Get Current Location var geolocator new Geolocator geolocator D
  • 属性的使用... INotifyPropertyChanged

    这只是我在学习属性时想到的事情 而且我太多地使用了 INotifyPropertyChanged 这只是一个想法 我想听听一些关于它的意见 我知道这需要在编译器上做一些工作 而不是在消费者方面 由于 INotifyPropertyChang