C#数据绑定标签无法刷新

C#数据绑定标签无法刷新,c#,data-binding,refresh,auto-update,C#,Data Binding,Refresh,Auto Update,我正在将对象值数据绑定到标签,但它不会刷新 lblTime.DataBindings.Add(new Binding("Text", AppSettings.Instance.SelectedAuction, "EndDate", false, DataSourceUpdateMode.OnPropertyChanged)); 绑定工作,使用messagebox,我知道值正在更改。我正确地使用了INotifyChanged,但它不起作用。 更改单个值是有效的,例如: AppSettings.I

我正在将对象值数据绑定到标签,但它不会刷新

lblTime.DataBindings.Add(new Binding("Text", AppSettings.Instance.SelectedAuction, "EndDate", false, DataSourceUpdateMode.OnPropertyChanged));
绑定工作,使用messagebox,我知道值正在更改。我正确地使用了INotifyChanged,但它不起作用。 更改单个值是有效的,例如:

AppSettings.Instance.SelectedAuction.EndDate = ((Auction)lbAuctions.SelectedItem).EndDate;
但我想替换整个对象,它不会更新:

AppSettings.Instance.SelectedAuction = (Auction)lbAuctions.SelectedItem;
为什么会这样?我可以刷新单个值,但不能刷新对象本身

public Auction SelectedAuction
    {
        get { return this.selectedAuction; }
        set
        {
            this.CheckPropertyChanged<Auction>
            ("SelectedAuction", ref this.selectedAuction, ref value);
        }
    }
公开拍卖精选作品
{
获取{返回this.selectedAction;}
设置
{
此.CheckProperty已更改
(“SelectedAction”,ref this.SelectedAction,ref value);
}
}

替换对象本身或我需要引用的其他内容时,是否有其他方法可使用?

lblTime
上设置的数据绑定由
AppSettings.Instance.在调用
AddBinding
时,SelectedAction
在对象引用上设置。数据绑定订阅该对象上的
PropertyChanged
事件。在
实例上更改
所选的导入
不会改变这一点。数据绑定仍在原始对象上订阅。(这也意味着您有一个内存线索,因为数据绑定引用了原始的
CurrentAuction
,所以该实例不会被垃圾收集)

您需要改为设置数据绑定,以便可以为
实例
对象上的事件列出数据绑定。您必须将绑定设置为
“CurrentAuction.EndDate”
。这将不直接工作(参见下面的注释),但是有一个帮助对象,可以放置在支持该绑定的中间。以下是一个例子:

BindingSource bs = new BindingSource();
bs.DataSource = AppSettings.Instance;
lblTime.DataBindings.Add("Text", bs, "CurrentAuction.EndDate", false, 
      DataSourceUpdateMode.OnPropertyChanged);

注意:在3.5版中,它将不使用
BindingSource
,但在4.0版中不会,请参见谢谢-它感觉像是向前迈出了一步,但仍然没有刷新。。我有一个列表框,它以同样的方式显示了它们的列表和数据源——但这根本不起作用……啊——起作用了。我的列表框索引更改事件已撤消?!重新设置它,它当然会工作。