为了学习数据绑定,我有一个带有复制示例代码的测试项目。我有一个带有一些属性的测试类,在一个表单上我有一些文本框,它们应该双向绑定到类属性:
public class Test : INotifyPropertyChanged
{
private string strProp1;
private string strProp2;
public string StrProp1
{
get {return strProp1; }
//set { strProp1 = value; OnPropertyChanged("StrProp1"); }
set { strProp1 = value; OnPropertyChanged(); }
}
public string StrProp2
{
get { return strProp2; }
set { strProp2 = value; OnPropertyChanged(); }
}
///.... more properties
//---------------------------------
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
字符串
/在Form类和Load()中/
Test tst=new Test();
txt1.DataBindings.Add("Text", tst, "StrProp1", true, DataSourceUpdateMode.OnPropertyChanged);
txt2.DataBindings.Add("Text", tst, "StrProp2", true, DataSourceUpdateMode.OnPropertyChanged);
型
现在,当我只编辑文本框txt 2时,我看到调试器执行了以下代码/调用:
- set { strProp2...// OK
- OnPropertyChanged()//确定
- 所有属性的getters//不必要?
- OnPropertyChanged()//不必要,第二次。为什么会这样?
- 所有属性的getters//不必要,第二次!
我还不完全明白这些绑定。我的编码错误是什么?有没有更好的方法来实现双向绑定?OnPropertyChanged():为什么每次都要创建handler = PropertyChanged?PropertyChangedEventArgs(propertyName)中的propertyName有什么用途?反正不用了?谢谢你的帮助/建议。
数据绑定只更新必要的属性,而不双重调用所有的类getter。
1条答案
按热度按时间idfiyjo81#
数据绑定对表很有用,这里是一个例子
字符串

单击此处显示