为建立中文知识库加块砖 ——中科大胡不归
0. 问题描述
作为wpf的初学者,最近处理MVVM下动态增加和修改ListBox的数据时遇到数据修改后界面不刷新的问题。可能是简单的问题,只是作为新手难免射箭找不到靶。记录下来,方便后来人。
1. 解决方法
1.1 修改前
参照MVVM的规范,绘制界面数据列表显示如下:
Model代码:
namespace WPFDemo.Model
{
public class UserInfo
{
public Brush UserBackground { get; set; }
public string Header { get; set; }
public string Name { get; set; }
public string Info { get; set; }
public int Count { get; set; }
}
}
这样的写法本来没什么问题,只是当我们动态修改列表的数据,界面不会刷新。
1.2 修改后
查询之后在StackOverflow找到一个未被采纳的答案,验证之后正是我们要的答案。关键在于Model作为被绑定的数据源也需要继承INotifyPropertyChanged接口,才能发出数据变更广播实现界面刷新。
Model代码:
public class UserInfo:INotifyPropertyChanged
{
public Brush UserBackground { get; set; }
public string Header { get; set; }
public string Name { get; set; }
public string Info { get; set; }
private int _count;
public int Count
{
get { return _count; }
set
{
_count = value;
OnPropertyChanged("Count");
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
这里只演示更改Count属性,修改其他属性参考此即可。
修改效果如图: