如何使用 INotifyPropertyChanged 更新列表框项目

2024-02-12

我有一个列表框,它与对象集合进行数据绑定。 我想修改项目的显示方式,以向用户显示这些对象之一是我的程序中的 START 对象。

我尝试按照以下方式执行此操作,但列表框不会自动更新。 使控制无效也不起作用。

我能找到的唯一方法是完全删除数据绑定并再次将其添加回来。但就我而言,这是不可取的。

还有别的办法吗?

class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string _name;
    public string Name
    {
        get
        {
            if (PersonManager.Instance.StartPerson == this)
                return _name + " (Start)";                      
            return _name;
        }
        set
        {
            _name = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("Name"));
        }
    }

    public Person(string name)
    {
        Name = name;
    }
}

这是管理列表和起始项的类

class PersonManager
{
    public BindingList<Person> persons { get; set; }
    public Person StartPerson { get; set; }

    private static PersonManager _instance;
    public static PersonManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new PersonManager();
            }
            return _instance;
        }
    }

    private PersonManager()
    {
        persons = new BindingList<Person>();
    }
}

在表单中我使用以下代码

    private void button1_Click(object sender, EventArgs e)
    {
        PersonManager.Instance.StartPerson = (Person)listBox1.SelectedItem;
    }

我很确定问题在于,当您这样做时,您实际上是在使 Person.Name 属性“get”访问器更改值(并且就 UI 而言,其行为类似于 set 访问器)。

然而,没有任何东西更新绑定来表明这种情况正在发生。如果 PropertyChanged 在您设置开始时被调用,我相信这会更新。

它很笨重,但是按照您编写的方式,我相信您可以添加它并使其工作(注意:我没有测试它,所以它〜可能〜有问题):

private void button1_Click(object sender, EventArgs e)
{
    Person newStart = (Person)listBox1.SelectedItem;
    if (newStart != null)
    {
        PersonManager.Instance.StartPerson = newStart;
        newStart.Name = newStart.Name; // Dumb, but forces a PropertyChanged event so the binding updates
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 INotifyPropertyChanged 更新列表框项目 的相关文章

  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 成员字段、构建顺序

    在 C 中 当执行如下所示的操作时 构造顺序是否得到保证 Logger Logger kFilePath logs runtime log logFile kFilePath 是的 施工顺序始终得到保证 但是 不能保证它与对象在初始值设定项
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • BufferBlock 连续

    我想使用以下方式实现消费者 生产者模式BufferBlock
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action

随机推荐

  • 该函数会在返回之前等待异步函数完成吗?

    假设我有这些地理编码调用 function myFunction marker1 marker2 var firstAddress null var secondAddress null geocoder geocode latLng ma
  • 将 PowerShell 与 .NET 3.5 运行时/库结合使用

    是否可以运行由 3 5 运行时而不是 2 0 支持的 PowerShell 1 0 或 2 0 CTP 我们正在构建 NET 3 5 解决方案 我仍然想使用 PowerShell 作为计划任务等的脚本引擎 我不需要 LINQ 语法或任何东西
  • 为什么 startActivityForResult 不返回任何内容?

    我在 PreferenceActivity 中有一个 选择图像 Intent i new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL
  • 类型错误:参数 1 必须是 ImagingCore,而不是 ImagingCore

    在 Windows 下我收到此错误 如何修复PIL 这是错误 TypeError 参数 1 必须是 ImagingCore 而不是 ImagingCore usr bin python coding utf 8 from PIL impor
  • 如何在java网络中广播

    这是我第一次用java进行网络编程 我正在寻找一种以某种方式向整个网络中的所有节点发送广播的方法 让他们知道我的存在 我正在尝试制作一款多人网络游戏 我希望客户能够看到所有可用的游戏以选择加入哪一个 我想知道如何从服务器广播以及如何让客户端
  • 带有文件参数的 Jenkins 管道作业

    我正在整理一个 Jenkins 管道作业 该作业将采用文件参数 我可以触发该作业并将其指向一个文件 但是我找不到该文件的最终位置 在普通的自由式作业中 它将位于工作区中 上传的文件去哪儿了 或者文件参数当前不适用于管道 目前管道和文件参数存
  • VS2008:自动生成的文件和 XML 文档

    这与其说是一个问题 不如说是一个烦恼 我的项目包含许多自动生成的文件 使用 mgmtclassgen exe 当我生成 XML 文档时 我的精美注释库受到来自这些 autogen 文件的 xml 文档警告的困扰 有没有办法a 抑制为这些文件
  • CakePHP SQLSTATE[HY000][14]错误

    我正在尝试将当前的 CakePHP 2 x 应用程序升级到 3 x 我修复了命名空间和文件夹结构问题 现在我遇到了数据库问题 在我的测试服务器中 我创建了相同的 MySQL 数据库并授予用户访问权限 然后我就改变了config app ph
  • Python:列表中 Nan 的相等性?

    我只是想弄清楚这些结果背后的逻辑 gt gt gt nan float nan gt gt gt nan nan False I understand that this is because the eq method is define
  • iOS - 如何访问设备的文件库?

    我正在尝试构建一个可以打开设备上存储的任何 pdf 的应用程序 但我真的不知道如何获取这些文件的句柄 我搜索了文档 发现的每个类都假设我已经拥有该文件的句柄 我在这里一定缺少一些东西 有多种应用程序可以访问音频和图片文件 肯定有办法访问 p
  • 如何使用VBA从Excel工作表中的图片获取EXIF信息

    如何使用 VBA 从 Excel 工作表中的形状图片获取 EXIF 信息 如纬度 经度等 是否可以在不从工作表或压缩的 Excel 工作簿中提取或复制图片的情况下获得它 我可以使用以下代码迭代压缩文件夹内容 Public Sub ReadZ
  • 如何在 Blazor Server 中动态添加、删除输入文本框并获取值?

    我有 Blazor 服务器应用程序 如何在单击按钮时动态添加新的输入文本框并将其删除 并在单击提交按钮时获取所有输入文本框的值 以便将它们保存在数据库中 for int i count i gt 1 i div class row div
  • 在 Spring Boot 中使用@Profile

    我有 Spring Boot 应用程序 1 1 5 发布 并通过配置属性启用我的配置文件spring profiles active MyProfile 配置文件被正确激活 我可以通过正在创建的配置文件中的 bean 看到这一点 然后我有一
  • 从键盘获取输入,无需等待输入

    fgets 和 getch 等函数将等待用户输入 然后再继续 我想要的是这个功能 如果用户按 x 变量将开始递减 c 将使变量开始递增 问题是当我尝试获取输入时程序停止 我希望变量在等待用户输入时继续递增或递减并且不 冻结 我正在使用 Vi
  • 将密码重置添加到 Django Admin 会转到错误的 URL?

    我正在关注以下部分添加密码重置功能 https docs djangoproject com en 2 1 ref contrib admin adding a password reset feature到 Django Admin 它会
  • 为什么不从 WinRT 应用程序(在 StreamSocket 上)连接到 win32 应用程序(在 QTcpSocket 上)

    我正在开发一个带有 Metro 应用程序和 win32 桌面的 Windows 8 1 聊天客户端应用程序 问题是未在 Tcp 套接字上从 winrt 应用程序连接到 win32 应用程序 异常连接失败 错误未从其他计算机回复 有什么问题
  • SwiftUI [演示] / 尝试在已经演示的...上演示视图

    我正在开发一个 SwiftUI 应用程序 首先出现警告 然后出现错误 可能是因为我忽略了这些警告 我想展示我收到的警告 希望有人能指出我可能做错的事情 这是相关代码 struct CustomListView View var localL
  • 如何在 Swagger 中将 https:///swagger 更改为自定义

    我的任务是将 Swagger 安装到 Web API 项目中 已安装 来自 nuget 的最新版本的 Swashbuckle Swashbuckle Core Net45 和 Swashbuckle Net45 自定义 App Start
  • 将 .plist 文件解析为纯 XML C#

    我正在尝试使用 c 读取我的 Apple Safari 历史记录 该历史记录存储在 plist 文件中 但是我总是收到错误 并且我不确定正确的方法是什么 我尝试执行的代码是这样的 XmlDocument xmd new XmlDocumen
  • 如何使用 INotifyPropertyChanged 更新列表框项目

    我有一个列表框 它与对象集合进行数据绑定 我想修改项目的显示方式 以向用户显示这些对象之一是我的程序中的 START 对象 我尝试按照以下方式执行此操作 但列表框不会自动更新 使控制无效也不起作用 我能找到的唯一方法是完全删除数据绑定并再次