繁体   English   中英

C#数据绑定标签不会刷新

[英]C# Databound Label wont refresh

我将一个对象值绑定到标签,它不会刷新。

lblTime.DataBindings.Add(new Binding("Text", AppSettings.Instance.SelectedAuction, "EndDate", false, DataSourceUpdateMode.OnPropertyChanged));

绑定工作,并使用消息框,我知道值正在更改。 我正确使用了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);
        }
    }

是在替换对象本身时使用另一种方法还是我需要参考的其他方法?

lblTime上设置的数据绑定是在调用AddBinding时通过AppSettings.Instance.SelectedAuction在对象引用上设置的。 数据绑定订阅该对象上的PropertyChanged事件。 更改Instance上的SelectedAuction不会改变它。 数据绑定仍在原始对象上订阅。 (这也意味着您有一条内存条,因为数据绑定引用了原始的CurrentAuction ,所以该实例将不会被垃圾回收)

您需要改为设置数据绑定,以便可以为Instance对象上的事件列出数据绑定。 您必须将绑定设置为"CurrentAuction.EndDate" 这将不能直接工作(*请参阅下面的注释),但是可以在中间放置一个辅助对象BindingSource ,它将支持该绑定。 下面是一个示例:

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

注意:在3.5中没有BindingSource情况下将可以使用,但在4.0中则不能使用,请参阅数据绑定是否支持Windows窗体中的嵌套属性?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM