问题描述
publiceventPropertyChangedEventHandlerPropertyChanged;publicvoidOnPropertyChanged(stringpropertyName){if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs(propertyName));}}其中PropertyChanged一直是null
解决方案
解决方案二:
你要先说明,为什么它应该有引用实例?
解决方案三:
你应该好好学学委托,因为这段代码已经有“自己生出自己”的逻辑问题了。PropertyChanged是一个委托对象的实例,在你这个类里也是事件,假设你的这个类是这样的:classUser{publiceventPropertyChangedEventHandlerPropertyChanged;privatestring_name;publicstringName{get{returnthis._name;}set{this._name=value;if(PropertyChanged!=null)PropertyChanged.Invoke(this,newPropertyChangedEventArgs("Name"));}}}而外部调用你的类时,应该是这样的:Useruser=newUser();user.PropertyChanged+=newPropertyChangedEventHandler(user_PropertyChanged);privatevoiduser_PropertyChanged(objectsender,PropertyChangedEventArgse){MessageBox.Show("user的"+e.PropertyName+"属性被更改");}当user的Name属性发生变更:user.Name="abc";这时就会以这样的方式实现委托的过程1、调用Name.set过程2、因为user.PropertyChanged已经指定了委托实现函数(user_PropertyChanged),所以这个函数会因为PropertyChanged.Invoke而触发3、弹出对话框“user的Name属性被更改”PropertyChanged在整个过程中的作用,就是让User以外的地方得以知道User的某个属性发生了变化,从而做出处理,它相当于“通知”的作用现在来看你所写的这段代码,你奇怪于PropertyChanged一直为null,这很正常,因为你没有使用user.PropertyChanged+=new……这样的实例化语句来指定委托如何实现,其次,OnPropertyChanged放在类自身中,然后又调用PropertyChanged(),幸亏你的PropertyChanged是null,否则就堆栈溢出了,这是假设PropertyChanged不为null的情况:PropertyChanged触发→OnPropertyChanged()→再次调用PropertyChanged→OnPropertyChanged()→再次调用PropertyChanged
解决方案四:
顺便再说一句,没有WVVM,而是MVVM
解决方案五:
@为轮子而生对不住,写错了,是MVVM,外部类实现了INotifyPropertyChanged,所以不用自己去写user.PropertyChanged+=new……这样的实例化语句来指定委托如何实现
解决方案六:
要有一个属性的实例,第二是要有属性的外部变化,这样才能看到你想要的效果。你可以选择一个属性,手动赋值,看一下效果,就知道是什么意思了。
解决方案七:
我有点搞不懂你想干什么了,能否说一下,你写OnPropertyChanged这个函数是想干什么
解决方案八:
@为轮子而生我想实现一种提醒,当我的一个属性的值变更时,前台能够自动获取变更的值。我自己做demo的时候,有的时候属性值自动变更,前台能够自动获取,即PropertyChanged不为空,但有的时候PropertyChanged为空,前台获取不到这个值的变更
解决方案九:
前台设置的是DataGrid中某一列的只读属性,当属性值为true的时候,DataGrid每一行的这一列的只读属性为true,不过当属性值变更时PropertyChanged为空;如果把属性绑定在一个textbox的只读属性时,PropertyChanged不为空;是不是PropertyChanged不能在DataGrid中进行一对多的绑定?
解决方案十:
怎么绑定的,贴代码上来