gpt4 book ai didi

winforms - 为什么 BindingSource 不告诉我哪个属性已更改?

转载 作者:行者123 更新时间:2023-12-02 21:36:13 24 4
gpt4 key购买 nike

我正在考虑使用数据绑定(bind) - 最简单的事情似乎是使用 BindingSource 来包装我的数据对象。

但是,虽然 CurrentItemChanged 事件会告诉我属性何时发生更改,但它不会告诉我是哪一个属性发生更改 - 而这是我需要的重要部分。

有什么办法可以找出哪个属性正在改变吗?

最佳答案

您的数据对象需要实现 INotifyPropertyChanged 接口(interface):

public class MyObject : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private string textData = string.Empty;

protected void OnPropertyChanged(string propertyName) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

public string TextData {
get { return textData; }
set {
if (value != textData) {
textData = value;
OnPropertyChanged("TextData");
}
}
}
}

然后,如果您使用BindingList,则可以使用BindingSource的ListChanged事件来查看哪个属性发生了更改:

BindingList<MyObject> items = new BindingList<MyObject>();
BindingSource bs = new BindingSource();

protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
items.Add(new MyObject() { TextData = "default text" });
bs.DataSource = items;
bs.ListChanged += bs_ListChanged;
items[0].TextData = "Changed Text";
}

void bs_ListChanged(object sender, ListChangedEventArgs e) {
if (e.PropertyDescriptor != null) {
MessageBox.Show(e.PropertyDescriptor.Name);
}
}

另请参阅Implementing INotifyPropertyChanged - does a better way exist?

关于winforms - 为什么 BindingSource 不告诉我哪个属性已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com