关于C#中WPF中使用ObservableCollection绑定XamDataGrid的问题
推荐于2016-04-21 · 知道合伙人数码行家
这里建议你使用Binding来处理。
了解下ObservableCollection<T> 类和BindingList<T> 类。
ObservableCollection<T> 类
表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
具体说明参考MSDN文档:http://msdn.microsoft.com/zh-cn/library/vstudio/ms668604(v=vs.100).aspx
BindingList<T> 类
提供支持数据绑定的泛型集合。BindingList<T> 类可以用作基类以创建双向数据绑定机制。
具体说明参考MSDN文档:http://msdn.microsoft.com/zh-cn/library/vstudio/ms132679(v=vs.100).aspx
两个都是支持双向绑定的,ObservableCollection<T>实现了 INotifyCollectionChanged 接口的数据集合的内置实现,还提供了CollectionChanged事件,在数据集的变更上提供的解决方法多一点。
看一下BindingList<T>,注意protected override void OnListChanged(ListChangedEventArgs e)的这个方法,可以重写这个方法实现强大的功能。
下面写一个自己的MyBindingList<T> 类来实现你所需要的功能。
public class MyBindingList<T> : BindingList<T>
{
public List<T> ModeList { get; set; }
public MyBindingList()
: base()
{
ModeList = new List<T>();
}
public MyBindingList(IList<T> list)
: base(list)
{
ModeList = new List<T>();
}
protected override void OnListChanged(ListChangedEventArgs e)
{
base.OnListChanged(e);
if (e.ListChangedType == ListChangedType.ItemChanged)
{
ModeList.Add(this.Items[e.NewIndex]);
}
}
}
完整的源代码看下附件。
要触发OnListChanged(),类需要继承INotifyPropertyChanged并触发值更改消息。
代码如下:
public class Student : INotifyPropertyChanged
{
private string _Id;
public string Id
{
get { return _Id; }
set
{
_Id = value;
NotifyPropertyChanged("Id");
}
}
private string _Name;
public string Name
{
get { return _Name; }
set
{
_Name = value;
NotifyPropertyChanged("Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
在MyBindingList里面添加ModeList属性,记录修改的记录,访问该属性就能获得修改的项。
看下是不是你需要的结果,如有疑问,可以继续回复。
具体怎么办呢?能给个示例的代码吗?我是个初学者
其中你的类应该实现INotifyPropertyChanged接口,这样,当某一行的属性发生变化时就会得到PropertyChanged的事件通知。
具体怎么办呢?能给个示例的代码吗?我是个初学者