ObservableCollection和List与INotifyPropertyChanged的使用


ObservableCollection和List的使用场合,分以下四种情况:

1.最简单的是只用List<T>,T不实现INotifyPropertyChanged接口,适用于一次性绑定,适用于重新实例化整个List集合的绑定。

2.List<T>,并且T实现INotifyPropertyChanged接口,因为INotifyPropertyChanged接口只是监测T,而没有监视List<T>集合。所以修改单笔T数据,可以发送通知给XAML,但是修改List<T>集合(比如增加数据,删除数据),就需要另辟蹊径。

3.用ObservableCollection<T>,T不实现INotifyPropertyChanged接口,适用于增删集合中的数据,但是对于单笔数据的更改就无能为力。

4.用ObservableCollection<T>,并且T实现了INotifyPropertyChanged接口,既可以赠删集合中的数据,又可修改单笔数据。


下面用一个Student类实现INotifyPropertyChanged接口:

</pre><pre name="code" class="csharp">public class Student : INotifyPropertyChanged
{
    #region 事件
    public event PropertyChangedEventHandler PropertyChanged;
    #endregion
        
    #region 变量
    private int _Id;
    private string _Name;
    private bool _Sex;
    private DateTime _Birthday;
    #endregion


    #region 构造函数
    public Student() { }
    #endregion


    #region 属性
    public int Id
    {
        set
        {
            _Id = value;
            OnPropertyChanged("Id");
        }
        get { return _Id; }


    }


    public string Name
    {
        set
        {
            _Name = value;
            OnPropertyChanged("Name");
        }
        get { return _Name; }
    }


    public bool Sex
    {
        set
        {
            _Sex = value;
            OnPropertyChanged("Sex");
        }
        get { return _Sex; }
    }


    public DateTime Birthday
    {
        set
        {
            _Birthday = value;
            OnPropertyChanged("Birthday");
        }
        get { return _Birthday; }
    }
    #endregion


    #region 方法
    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值