【问题标题】:How do I make a ListBox refresh the text?如何让 ListBox 刷新文本?
【发布时间】:2012-05-27 01:29:28
【问题描述】:

我已阅读此解决方案:How do I make a ListBox refresh its item text?

但是当对象的属性发生变化时,我仍然无法让 listBox 中显示的文本更新。

public partial class Form1 : Form
{
    public BindingList<Channel> chanList = new BindingList<Channel>();

    private void Form1_Load(object sender, EventArgs e)
    {
        lbChannels.DisplayMember = "Display";
        lbChannels.DataSource = chanList;
    }

} 


public class Channel
{
    public string Display
    {
        get
        {
            return ToString();
        }
    }

    public override string ToString()
    {
        if(!unread || DateTime.Now.Second % 2 == 0)
            return Name;
        return "";
    }
}

这里的目标是如果列表框中有未读数据,则使频道名称在列表框中闪烁,但是当我测试它时没有任何反应。我也试过调用 lbChannels.Refresh() 和 lbChannels.Update()。

我一定错过了什么,但我不知道是什么。另一个线程中的解决方案似乎太简单了,但我已经看过好几次了,我找不到与 listBox 相关的任何其他内容。我在这里错过了什么?

【问题讨论】:

  • 如果你要让它闪烁,你能不能让它发出响亮的声音并变成亮黄色?
  • 你对绑定的理解在很多层面上都是错误的,以至于很难知道从哪里开始解释......

标签: c#


【解决方案1】:

代码已经写在你提供的链接中了,用同样的方法。这是一个更新的例子:

private void btnUpdate_Click(object sender, EventArgs e)
        {
            Employee selectedEmployee = (Employee)lstEmployees.SelectedItem;
            selectedEmployee.Name = "Joseph";
            if (selectedEmployee != null)
            {
                _employees[selectedEmployee.Id] =selectedEmployee;
            }
        }

请不要绑定到使用重写 ToString 方法的 Display 函数,如果 Time in Seconds 是偶数,则该方法有效,这是没有意义的。

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 2013-02-24
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多