用IList模拟ObservableCollection类
本文关键字:ObservableCollection 模拟 IList | 更新日期: 2023-09-27 18:29:33
我正在使用SQLiteNet扩展来实现Playlist
和Track
的IList
之间的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
?
还是我在这方面走错了路?
SQLite Net Extensions已经支持ObservableList
作为*ToMany属性。不应该再需要任何变通方法了。