Если вы хотите, чтобы ваша коллекция наблюдалась системой привязки, вам необходимо реализовать INotifyCollectionChanged. Это позволит вам уведомлять заинтересованных клиентов об изменениях в вашей коллекции.
В дополнение к этому, чтобы уведомить слушателей об изменении всего класса, вы можете уведомить об изменении свойства с нулевым значением, переданным для имени. Это заставит все привязки переоценить источник.
Я просмотрел код немного дальше и запутался в твоих намерениях. Каждое перечисление возвращает совершенно новую коллекцию, которая плохо сочетается с понятием наблюдаемой коллекции. Клиенты наблюдаемой коллекции ожидают, что отдельные экземпляры их элементов останутся согласованными, поэтому им нужно только реагировать на реструктуризацию, а не обновлять весь список. Не могли бы вы уточнить, чего вы пытаетесь достичь?
Вместо того, чтобы пытаться обрабатывать ваше кэширование в классе коллекции, возможно, вы можете создать «ссылочный» класс TrackReference и использовать стандартную ObservableCollection. Класс будет выглядеть примерно так:
public class TrackReference
{
private Guid _id;
public Track Track
{
get { return MediaCache.Instance.GetTrack(id); }
}
public TrackReference(Track track)
{
_id = track.Id;
}
public TrackReference(Guid trackId)
{
_id = trackId;
}
}
Теперь у вас есть облегченная ручка, которую вы можете обойти (и наблюдать в коллекции), которая дает вам доступ к полным данным трека, когда вы будете к этому готовы. Это также хорошее место для добавления любых легких метаданных (возможно, названия дорожки) для ваших классов пользовательского интерфейса в Bind.