为了账号安全,请及时绑定邮箱和手机立即绑定

在自定义列表上实现 INotifyCollectionChanged

在自定义列表上实现 INotifyCollectionChanged

C#
蓝山帝景 2021-10-24 17:03:53
我目前在 UWP 中有一个类,它是一堆不同类型列表的包装器,包括我构建的自定义列表。这个包装器需要绑定到某种列表,ListView、ListBox、GridView 等。问题是当我试图实现时INotifyCollectionChanged,似乎 UI 元素没有将处理程序附加到CollectionChanged或PropertyChanged处理程序(处理程序总是null)。但是,将列表从我的自定义列表更改为 anObservableCollection似乎工作正常。我错过了什么让 UI 将其集合绑定到我的班级?我目前的实现看起来像public class MyWrapperList<T> : IList<T>, INotifyPropertyChanged, INotifyCollectionChanged{    private IEnumerable<T> _source;    // Implement all interfaces here, including my custom GetEnumerator() and all my add, insert, remove, etc classes}请注意,我不想像ObservableCollection许多其他答案所建议的那样继承,因为我希望这是一个查看原始列表的包装器。编辑:您可以在 GitHub 上找到可重现的问题示例:https : //github.com/nolanblew/SampleCollectionChanged/
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

为了具备ListView自动绑定到您的收藏,您必须实现这两个 INotifyCollectionChange 和 IList(注:这就是非通用的IList)。


如果您修改示例代码以便您的自定义列表类实现IList:


public class MyWrapperList<T> : IList<T>, INotifyPropertyChanged, INotifyCollectionChanged, IList

{


    //... all your existing code plus: (add your own implementation)


    #region IList 


    void ICollection.CopyTo(Array array, int index) => throw new NotImplementedException();        

    bool IList.IsFixedSize => throw new NotImplementedException();

    bool IList.Contains(object value) => throw new NotImplementedException();       

    int IList.IndexOf(object value) => throw new NotImplementedException();

    void IList.Insert(int index, object value) => throw new NotImplementedException();

    void IList.Remove(object value) => throw new NotImplementedException();

    int IList.Add(object value) => throw new NotImplementedException();

    public bool IsSynchronized => throw new NotImplementedException();

    public object SyncRoot { get; } = new object();


    object IList.this[int index] {

        get => this[index];

        set => this[index] = (T) value;

    }

    #endregion

}

然后在CollectionChanged触发按钮单击事件时设置。


查看完整回答
反对 回复 2021-10-24
  • 1 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信