C# PropertyChanged问题
我想将类student的字段name绑定到xaml界面上,在界面上可以看到绑定后name的值,但是我通过一个按钮更改name值后却不能更改界面的值,调试发现Propert...
我想将类student的字段name绑定到xaml界面上,在界面上可以看到绑定后name的值,但是我通过一个按钮更改name值后却不能更改界面的值,调试发现PropertyChanged为null,这是怎么回事?望大侠帮我看看!谢谢
public class Student:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name = "Name Test";
public string Name
{
get { return name; }
set {
if (name!=value)
{
name = value;
if (PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
} 展开
public class Student:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name = "Name Test";
public string Name
{
get { return name; }
set {
if (name!=value)
{
name = value;
if (PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
} 展开
1个回答
展开全部
在窗体的构造函数中,加入:
student对象.PropertyChangedEventHandler +=new PropertyChangedEventHandler(处理方法的名字);
否则,PropertyChangedEventHandler 就是空的了
student对象.PropertyChangedEventHandler +=new PropertyChangedEventHandler(处理方法的名字);
否则,PropertyChangedEventHandler 就是空的了
更多追问追答
追问
非常感谢!像你说的那样问题是解决了,但是在其他类似的的地方发现没有挂载处理事件,程序运行的时候事件依旧被触发了!对于Data Binding我的理解是只要字段改变事件就会触发,为什么还需要我们去挂载处理的方法呢?
追答
一般来说对于事件都要有如下几个步骤来处理:
1.编写事件处理方法相应的委托(定义好事件处理方法的参数,一般都没有返回值)
2.类中定义为委托类型的字段,即事件字段
3.编写事件处理方法
4.关联事件和事件处理方法,就是之前的回答
5.编写触发事件的代码,在适当的时机写类似你写的
if (PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
这样的代码
ps:
有时候在我们使用了.NET Framework的东西时,其中的某些环节会被封装。
1.如这个例子中,你没有定义PropertyChangedEventHandler 这个委托,而是直接使用了。
2.在Windows应用程序中,我们不写控件事件和事件处理方法关联的代码,因为双击控件或选择事件后双击会自动生成一些代码,放在窗体的designer.cs文件中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询