【问题标题】:How to raise PropertyChanged event for child properties?如何为子属性引发 PropertyChanged 事件?
【发布时间】:2014-11-25 14:50:30
【问题描述】:

我想要做的是将控件绑定到一个对象,我有一个分类法。我遇到的问题是当我做类似的事情时

private Taxonomy _currentTaxonomy = new Taxonomy() { TaxonomyID=0 };

public Taxonomy CurrentTaxonomy{
    get;
    set{
          _currentTaxonomy = value
          NotifyPropertyChanged("Taxonomy");
    }
}

这样,当分类被设置时,它会发出通知。但问题是我有控件绑定到该分类法中的值,在设置分类法时不会收到通知。因此,如果我加载新的分类,则不会发出任何通知。

例如,如果我尝试像这样设置分类法,则使用实体框架:

CurrentTaxonomy = context.Taxonomies.Find(2);

通知事件,如下所示:

public int TaxonomyID { 
    get { return _TaxonomyID; } 
    set { _TaxonomyID = value; NotifyPropertyChanged("TaxonomyID"); } 
}

不会被解雇。

根据请求,文本框绑定如下:

tbTitle.DataBindings.Add("Text", _currentTaxonomy, "Title", false, DataSourceUpdateMode.OnPropertyChanged);

【问题讨论】:

  • 您是否尝试在 Taxonomy 类中的各个属性上引发 PropertyChanged 事件,例如TaxonomyID ?
  • 我愿意,但他们不会在 CurrentTaxonomy= Context.Taxonomies.Find(2); 上被调用;
  • setter 中的代码是什么?另外,你为什么希望他们在 Find 上开火?当您将值设置为正确的值时,它应该触发吗?例如CurrentTaxonomy.TaxonomyID = 3
  • 我不希望他们被解雇,但我需要他们被解雇。如果我有一个 taxonomyID 文本框,并且我将 currentTaxonomy 设置为具有新 ID 的新分类,我需要该文本框来反映新的分类。我可以重置绑定,但我觉得应该有更好的方法。
  • 这应该可以正常工作。文本框中的数据绑定是如何完成的?

标签: c# bindingsource


【解决方案1】:

您应该将数据绑定到属性名称TaxonomyID。假设您的 BindingSource.DataSource 指向 CurrentTaxonomy 类。

tbTitle.DataBindings.Add("Text", _currentTaxonomy, "TaxonomyID", false, DataSourceUpdateMode.OnPropertyChanged);

看到这篇文章:

C# DataBinding - automatically writing changed property to label or textbox

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2011-02-08
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多