【问题标题】:Bound Textbox/Labels not updating when OnPropertyChanged firedOnPropertyChanged 触发时绑定的文本框/标签不更新
【发布时间】:2010-07-27 17:01:48
【问题描述】:

我有一个简单的应用程序,它使用 BindingList 人员来存储有关员工的信息(Windows 窗体)。 Person 具有多个属性,例如 Name、DateOfBirth 等,并实现了 INotifyPropertyChanged。

BindingList,people,被绑定到一个绑定源。 DataGridView 控件绑定到此源,并且按预期在 DataGridView 上更新属性更改。例如,当我更改一个人的年龄时,DataGridView 会立即更新。

当我使用相同的绑定源其他控件时会出现我的问题。我将文本框的文本属性绑定到 Person.Name,使用与 DataGridView 相同的绑定源。对 DataGridView 上的 Person.Name 属性的更改会更新,但不会对文本框进行更改。

如何在属性更改时更新文本框,例如 DataGridView?

克里斯

【问题讨论】:

  • 您与 TextBox 的绑定是否包含 DataSourceUpdateMode.OnPropertyChanged 参数?
  • @TreDub:回答这个问题,这很可能。对。
  • 是的,它设置为 DataSourceUpdateMode.OnPropertyChanged。但它不会更新值。我还需要启用什么才能让 OnPropertyChanged 工作吗?
  • 好的,我发现当属性从 GUI 线程以外的线程更改时,文本框不会更新(尽管 DataGridView 会),这是预期的行为吗?

标签: c# data-binding binding inotifypropertychanged


【解决方案1】:

很快,这是未经测试的,它可能需要由 Dispatcher 处理。尝试使用以下内容代替您的 TextBox

public class DispatchedTextBox : TextBox
    {
        DispatchEvent _propertyChanged = new DispatchEvent();

        protected override void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            this._propertyChanged.Fire(this, e);
        }

        protected override event PropertyChangedEventHandler PropertyChanged
        {
            add { this._propertyChanged.Add(value); }
            remove { this._propertyChanged.Remove(value); }
        }
    }

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2016-08-30
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多