zoukankan      html  css  js  c++  java
  • ObservableCollection

    1)可以使绑定控件与基础数据源保持同步
    2)还可以在您添加、删除、移动、刷新或替换集合中的项目时引发 CollectionChanged 事件
    3)还可以在您的窗口以外的代码修改基础数据时做出反应
    4)相互转换

    T tList = new List(tObjectStruct .ToList());
    ObservableCollection tObjectStruct = new ObservableCollection(tList);

    都在构造函数中即可完成
    也可以:
    tList.ForEach(p => tObjectStruct.Add(t));


    ObservableCollection类的应用
    1.1.1. 简介
    ObservableCollection类是Silverlight/WPF提供的用于数据绑定的集合类。它可以使绑定控件与基础数据源保持同步,如在绑定窗口外代码修改绑定数据源时可以做到同时更新绑定页面。更强大的是ObservableCollection 类还可以在您添加、删除、移动、刷新或替换集合中的项目时做到无刷新的更新页面显示。
    1.1.2. 应用场景
    在工程项目管理系统中经常要在页面显示大量具有层次结构的数据,如“模板维护”页面有800多项任务以树形列表的方式显示在页面。而我们要做的工作包括直接更改某个或多个任务项的属性,从别的窗口更改某个或多个任务项的属性;删除、添加、移动任务项。如果应用以前的经验页面空间绑定DataTable或普通集合,则需要编写很多代码来实现上述要求,而且不可避免的要刷新页面。代码量巨大而且用户体验也不好。而ObservableCollection 类则很好的解决了上述问题。
    1.1.3. 应用示例
    ObservableCollection 类从 Collection(Of T)(泛型集合的基类)继承而来,并实现了 INotifyPropertyChanged和INotifyCollectionChanged 两个接口。每当ObservableCollection的项发生属性更改或项目添加、删除等,它就会广播有关对其元素所做的更改的信息,绑定的页面也就做到了自动无刷新更新。
    接下来让我们看看具体的使用方法。E_ProjectPlan是工程项目管理系统里的任务项的实体类,它包含了很多属性,如:工作项代码、工作项名称、责任人、责任部门等。它了实现INotifyPropertyChanged 接口,以便属性值发生更改时会通知该类实例和绑定的界面,代码如下:
    /// <summary>
    /// 任务项实体类
    /// </summary>
    public class E_ProjectPlan : INotifyPropertyChanged {}
    在实现INotifyPropertyChanged 接口时,它必须提供 PropertyChanged 事件和OnPropertyChanged方法,代码如下:
    //声明属性更改事件
    public event PropertyChangedEventHandler PropertyChanged;

    /// <summary>
    /// 当属性更改时出发更改通知
    /// </summary>
    /// <param name="propertyName">更改的属性名称</param>
    public void NotifyPropertyChanged(string propertyName)
    {
    if (PropertyChanged != null)
    {
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    }
    然后,在属性的发生改变时调用 OnPropertyChanged:
    /// <summary>
    /// 任务名称
    /// </summary>
    public string WorkNM
    {
    get { return _worknm; }
    set
    {
    _worknm = value;
    NotifyPropertyChanged("DisplayIndex");
    }
    }

    接下来就是应用我们的实体类了,在页面中创建一个E_ProjectPlan的ObservableCollection集合:
    public ObservableCollection<E_ProjectPlan> datalist = new ObservableCollection<E_ProjectPlan>();
    最后把集合绑定到控件,工作就完成了。现在只要操作datalist集合就可以在画面上实现更新、添加、删除、移动的功能了,而且是无刷新的!
    应用了ObservableCollection的INotifyPropertyChanged。对于INotifyCollectionChanged我们可以应用它捕捉集合中的更改事件,来做相应的处理。示例代码如下:
    ((INotifyCollectionChanged)this.datalist).CollectionChanged += new
    NotifyCollectionChangedEventHandler(MainPage_CollectionChanged);

    /// <summary>
    /// 数据集合发生变化
    /// </summary>
    public void datalist_CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
    {
    if (e.Action == NotifyCollectionChangedAction.Add)
    {
    //
    }
    if (e.Action == NotifyCollectionChangedAction.Remove)
    {
    //
    }
    }

  • 相关阅读:
    LG2664 树上游戏
    「NOI2007」 货币兑换
    「NOI2012」骑行川藏
    LG4721 【模板】分治 FFT
    LG4783 【模板】矩阵求逆
    test20181019 B君的第二题
    LOJ129 Lyndon 分解
    「NOI2017」泳池
    LG4723 【模板】常系数线性递推
    「AHOI / HNOI2017」礼物
  • 原文地址:https://www.cnblogs.com/quietwalk/p/3531624.html
Copyright © 2011-2022 走看看