用IList模拟ObservableCollection类

本文关键字:ObservableCollection 模拟 IList | 更新日期: 2023-09-27 18:29:33

我正在使用SQLiteNet扩展来实现PlaylistTrackIList之间的OneToMany关系。

目前,该库只支持List和数组(我更改了库,允许IList作为List)。

现在,每当我的曲目集合被修改(添加、删除、清除)时,我都希望能够收到通知,但库不允许ObservableCollection(我也不想对库做太多更改)。这意味着我正在尝试按如下方式重新创建ObservableCollection

class ObservableIList<T> : IList<T>, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,
                new PropertyChangedEventArgs(propertyName));
        }
    }

    private List<T> list = new List<T>();
    public void Add(T item)
    {
        list.Add(item);
        OnPropertyChanged("magical property name");
    }
    ....
}

因此,我的Playlist将如下所示:

class Playlist
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Title { get; set; }
    [Indexed]
    public Boolean isCurrent { get; set; }
    [OneToMany]
    public ObservableIList<Track> Tracks { get; set; }
}

这似乎应该有效,只是我不知道在向ObservableList添加新的Track时应该使用什么propertyName

还是我在这方面走错了路?

用IList模拟ObservableCollection类

SQLite Net Extensions已经支持ObservableList作为*ToMany属性。不应该再需要任何变通方法了。