C# ListBox 更新项目更改

标签 c# winforms listbox

我有一个自定义对象列表,我已将其添加到我的 WinForms C# 4.0 应用程序中的 ListBox 控件中。

当用户在 ListBox 中选择特定元素时,该对​​象的属性会出现在各个输入字段中 ListBox 旁边的窗口中。用户可以更改这些并单击“保存”,这将修改对象的数据成员以与用户所做的更改相对应。

该功能确实有效。值被保存到对象中,当用户再次选择该元素时,他们的更改被确认正确保存。

不起作用的是列表框中文本的更新。例如,如果我们在 ListBox 中有一个员工列表,我们可以在那里看到“John Smith”,我们可以单击他的名字 - 将他的名字编辑为“John Smithe”,然后单击“确定”。 ListBox 仍然显示“John Smith”,但是如果我们单击他的名字,那么在右侧的 TextBoxes 中我们可以看到他的名字已正确更改为“John Smithe”。

我试过在 ListBox 上调用 Refresh() 方法,但这没有用。

我可以通过从 ListBox 中删除项目并再次添加来修复它。这行得通,而且这不是真正的问题,因为这些项目无论如何都存储在单独的列表中,所以我没有失去任何员工的风险。

但这真的是最好的方法吗?有没有更优雅的方法来更新 ListBox 中的文本而无需再次删除/添加项目?

最佳答案

ListBox 中的对象是否实现 INotifyPropertyChanged

更新:

看来你可以通过几个步骤解决问题:

  1. ListBoxDisplayMember 属性设置为您的对象的一个​​属性,该属性提供您希望在列表中显示的任何内容。对于这个答案,我假设此属性被命名为 DisplayText
  2. 让对象实现 INotifyPropertyChanged
  3. 在影响 DisplayText 值的所有属性的 setter 中,使用 DisplayText 作为属性名称引发 NotifyPropertyChanged 事件。

然后你就可以开始了。

关于C# ListBox 更新项目更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5293539/

相关文章:

c# - 将面板添加到用户控件时出错 : Object reference not set to an instance of an object

c# - Form1_KeyDown 不工作

c# - 删除列表框中的重复项

c# - 模态形式的验证

c# - ListBox.SelectedIndexChanged - 你能确定它是否是用户发起的吗?

c# - 检查绑定(bind)到 MVVM 应用程序中的 ObservableCollection 的列表框中的选定项

c# - Writeablebitmap - 向左滚动 1 px,最好的方法是什么? (也就是 memmove 在哪里?)

c# - 如何从纯文本中检索粗体、斜体和带下划线的单词并用 HTML 标记包围它们

c# - C# 中具有类型参数的泛型类型

c# - 以编程方式制定图像轮廓(最好是 C#/C++ 编码,或伪编码)