赞
踩
在C/S架构中,常常会遇到动态更新数据,在不同的窗体中进行数据的动态操作,数据往往不能达到实时更新效果,而想要实现这一功能,C#中为我们提供了ObservableCollection类可以在添加,删除项目或刷新列表时提供属性变更通知,下面来总结一下ObservableCollection的使用。首先定义一个GlobalModel类,类中声明一个静态的动态集合,这样这个动态集合可以作为全局的变量进行使用:
public class GlobalModel : ObservableObject
{
//全局静态变量 StudentVo
private static ObservableCollection<StudentVo> studentMessage = new ObservableCollection<StudentVo>();
public static ObservableCollection<StudentVo> StudentMessage
{
get { return studentMessage; }
set
{
studentMessage = value;
}
}
}
下面是简单的页面,从页面看也是简单的增删改和导出,不过数据是存储在ObservableCollection临时集合中,是对ObservableCollection临时集合数据的增删改和通过学生Id进行排序。
首先是新增的功能,逻辑就是把用户操作的数据存储在ObservableCollection集合中,通过INotifyPropertyChanged接口监听StudentVo中的属性,如果集合有更改,就会提供属性变更通知
public class StudentVo : INotifyPropertyChanged { private int studentId; public int StudentId { get { return studentId; } set { studentId = value; if (PropertyChanged != null)//有改变 { PropertyChanged(this, new PropertyChangedEventArgs("StudentId")); } } } private string studentName; public string StudentName { get { return studentName; } set { studentName = value; if (PropertyChanged != null)//有改变 { PropertyChanged(this, new PropertyChangedEventArgs("StudentName")); } } } private string studentNumber; public string StudentNumber { get { return studentNumber; } set { studentNumber = value; if (PropertyChanged != null)//有改变 { PropertyChanged(this, new PropertyChangedEventArgs("StudentNumber")); } } } public event PropertyChangedEventHandler PropertyChanged; }
新增成功后的数据信息根据学生id进行倒序显示。下面说说修改学生信息的操作,因为是临时的数据,我们无法根据学生Id 进行修改,怎么办呢?也在网上找了一下答案,无法根据学生Id修改那么我们只能根据索引index修改:
//获取列表选中值(唯一元素)
StudentVo student = GlobalModel.StudentMessage.Where(o => o.StudentId == SelectId).SingleOrDefault();
int index = GlobalModel.StudentMessage.IndexOf(student);//获取列表选中值的索引
GlobalModel.StudentMessage[index].StudentId = StudentId;
GlobalModel.StudentMessage[index].StudentName = StudentName;
GlobalModel.StudentMessage[index].StudentNumber = StudentNumber;
// GlobalModel.StudentMessage.OrderByDescending(o => o.StudentNumber);
MessageBox.Show("修改成功!");
首先要获取你在表格中选的数据,从选中的数据中获取索引,然后根据索引修改数据。最后是搜索的功能:
public RelayCommand SerchCommand { get { return serchCommand ?? (serchCommand = new RelayCommand(() => { var cvs = CollectionViewSource.GetDefaultView(StudentListEnty); if (!string.IsNullOrEmpty(StudentInfo)) { if (cvs != null && cvs.CanFilter) { cvs.Filter = OnFilterApplied; } } else cvs.SortDescriptions.Clear(); })); } } private bool OnFilterApplied(object obj) { if (obj is StudentVo) { var text = StudentInfo; return (obj as StudentVo).StudentName.Contains(text) || (obj as StudentVo).StudentNumber.Contains(text); } return false; }
先定义一个OnFilterApplied方法进行数据过滤,代码直接在命令中写了,哈哈,最后是效果展示:
如果想要动态更新数据,首先是类继承并实现INotifyPropertyChanged的方法,通过PropertyChanged方法提供属性变更通知,然后是通过静态的集合数据在全局进行使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。