WPF中,利用WVVM时,PropertyChanged一直是null

bobo785514153 2016-05-18 10:57:13
public event PropertyChangedEventHandler PropertyChanged;

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

其中PropertyChanged 一直是null
...全文
2242 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
当你执行了 user.PropertyChanged += ......,那么你调试的就肯定不是这个 user,而是别的对象了。
E次奥 2018-01-09
  • 打赏
  • 举报
回复
把继承接口的类发出来看看,在哪个类继承了接口,就在那里实现PropertyChanged委托,然后这个类中的属性的Set方法中调用这个委托,这个类的属性在XAML中绑定,当属性更改的时候肯定会进入Set方法,就会执行到这个委托当中;
IT小杰 2018-01-08
  • 打赏
  • 举报
回复 1
构造方法里面加入下面这句: this.DataContext = this; 通知无效是因为上下文都没设置,绑定根本没生效。
Jaf932074323 2017-05-15
  • 打赏
  • 举报
回复
引用 2 楼 rocmemory 的回复:
你应该好好学学委托,因为这段代码已经有“自己生出自己”的逻辑问题了。 PropertyChanged是一个委托对象的实例,在你这个类里也是事件,假设你的这个类是这样的: class User { public event PropertyChangedEventHandler PropertyChanged; private string _name; public string Name { get { return this._name; } set { this._name = value; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name")); } } } 而外部调用你的类时,应该是这样的: User user = new User(); user.PropertyChanged += new PropertyChangedEventHandler(user_PropertyChanged); private void user_PropertyChanged(object sender, PropertyChangedEventArgs e) { 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
public event PropertyChangedEventHandler PropertyChanged; 这个是在绑定界面控件的时候使用,用户不能自定义user.PropertyChanged += new …… 楼主想问的是为什么界面上绑定了,PropertyChanged还是为空
xuggzu 2017-05-15
  • 打赏
  • 举报
回复 1
UI绑定后,propchanged才有值。但前提是源至少有一个属性被绑定,如果写错了,没绑定上,那就没了。
zhujinqiang 2017-05-15
  • 打赏
  • 举报
回复
是不是应该先把委托作为一个类的成员函数或者方法,然后才能再对委托进行静态调用啊 等大神来解答。
为轮子而生 2016-05-21
  • 打赏
  • 举报
回复
怎么绑定的,贴代码上来
bobo785514153 2016-05-20
  • 打赏
  • 举报
回复
前台设置的是DataGrid中某一列的只读属性,当属性值为true的时候,DataGrid每一行的这一列的只读属性为true,不过当属性值变更时PropertyChanged为空;如果把属性绑定在一个textbox的只读属性时,PropertyChanged不为空;是不是PropertyChanged不能在DataGrid中进行一对多的绑定?
bobo785514153 2016-05-20
  • 打赏
  • 举报
回复
@为轮子而生 我想实现一种提醒,当我的一个属性的值变更时,前台能够自动获取变更的值。我自己做demo的时候,有的时候属性值自动变更,前台能够自动获取,即 PropertyChanged不为空,但有的时候PropertyChanged为空,前台获取不到这个值的变更
  • 打赏
  • 举报
回复
你要先说明,为什么它应该有引用实例?
为轮子而生 2016-05-19
  • 打赏
  • 举报
回复
我有点搞不懂你想干什么了,能否说一下,你写OnPropertyChanged这个函数是想干什么
南天空 2016-05-19
  • 打赏
  • 举报
回复
要有一个属性的实例,第二是要有属性的外部变化,这样才能看到你想要的效果。 你可以选择一个属性,手动赋值,看一下效果,就知道是什么意思了。
为轮子而生 2016-05-19
  • 打赏
  • 举报
回复
顺便再说一句,没有WVVM,而是MVVM
bobo785514153 2016-05-19
  • 打赏
  • 举报
回复
@为轮子而生 对不住,写错了,是MVVM,外部类实现了INotifyPropertyChanged,所以不用自己去写 user.PropertyChanged += new ……这样的实例化语句来指定委托如何实现
为轮子而生 2016-05-19
  • 打赏
  • 举报
回复 1
你应该好好学学委托,因为这段代码已经有“自己生出自己”的逻辑问题了。 PropertyChanged是一个委托对象的实例,在你这个类里也是事件,假设你的这个类是这样的: class User { public event PropertyChangedEventHandler PropertyChanged; private string _name; public string Name { get { return this._name; } set { this._name = value; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name")); } } } 而外部调用你的类时,应该是这样的: User user = new User(); user.PropertyChanged += new PropertyChangedEventHandler(user_PropertyChanged); private void user_PropertyChanged(object sender, PropertyChangedEventArgs e) { 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

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧