, Универсальный просто означает, что вы можете использовать эту вещь в гораздо большем количестве мест, чем 1, включая будущий проект.

м приложении WPF у меня есть ItemsControl, значения элементов которого зависят от предыдущего элементаотображается.

ViewModel - это аудиофайл, разбитый на части переменной длины, и мне нужно отобразить его таким образом, с датой DateTime, отображаемой справа, и это то, что мне нужно рассчитать (я знаю только длину каждой части, мне нужно вычислить фактическое время начала и окончания, а также позиция в ItemsControl).

--
  ----
      ------------
                  --
                    --------------------

Мой первый подход состоял в том, чтобы использоватьObservableCollection<MyviewModel> но вскоре произошли ужасы

5-полосное мультисвязывание, в которомIMultiValueConverter Я бы рассчитал возвращаемое значение и установил бы свойство DataContext на это значение, потому что я знал только предыдущий элемент во время выполнения.

Предыдущий элемент был отправлен с использованием привязкиRelativesource.PreviousData.

Теперь моя проблема заключается в том, что после установки значения из Конвертера (что, очевидно, является плохой вещью) и фактического запуска его в работу, обычная Коллекция не имеет понятия порядка в своих элементах, поэтому, когда дальше Я хочу добавить аудио часть в середине остальных, дисплей испорчен.

Кроме того, когда я реализую больше бизнес-логики, мне может понадобиться получить доступ к началу и концу аудио частей, которые рассчитаны в этом конвертере, и что, если они еще не отображаются ...?

Так что этот подход был неправильным на нескольких уровнях.

Вот где я начал гуглить и узнал оLinkedList, Теперь я пытаюсь создать класс, который по сути является Observable LinkedList (мне не нужно, чтобы он был универсальным):

public class ObservableSegmentLinkedList : LinkedList<MyViewModel>, INotifyCollectionChanged
    {
        //Overrides ???

        #region INotifyCollectionChanged Members

        public event NotifyCollectionChangedEventHandler CollectionChanged;
        public void OnNotifyCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            if (CollectionChanged != null)
            {
                CollectionChanged(this, e);
            }
        }

        #endregion
    }

И суть проблемы в том, что я не могу переопределить методы, которые изменяют коллекцию (Addfirst, AddLast и т. Д.), Поэтому я не могу правильно вызвать OnNotifyCollectionChanged ...

Так что я думаю, что могу сделать перегрузки для каждого из этих методов, но это звучит довольно неприятно ...

Вкратце: мне нужна какая-то коллекция, в которой каждый элемент знает детали предыдущего, чтобы вычислить одно из его собственных свойств.

Есть какие-нибудь подсказки? это даже хорошее решение?

Спасибо!

Приложение ViewModel выглядит так:

public class MyViewModel : INotifyPropertyChanged
    {
        private DateTime m_SegmentLength;
        public DateTime SegmentLength
        {
            get { return m_SegmentLength; }
            set
            {
                m_SegmentLength = value;
                NotifyPropertyChanged("SegmentLength");
            }
        }

        private DateTime m_SegmentAdvert;
        public DateTime SegmentAdvert
        {
            get { return m_SegmentAdvert; }
            set
            {
                m_SegmentAdvert = value;
                NotifyPropertyChanged("SegmentAdvert");
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String prop)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }

        #endregion
    }

РЕДАКТИРОВАТЬ: я думаю, что я попытаюсь объединить ответы Томаса и Уилла: я буду использовать композицию (т.е. я сохраню экземпляр LinkedList в своем пользовательском объекте вместо того, чтобы наследовать от него) и переопределю методы, которые должны использоваться (AddAfter, AddFirst и т.д.), в котором я просто вызову OnNotifyPropertychanged после вызова фактического метода LinkedList. Это немного работы, но я думаю, что не будет никакого элегантного решения моей проблемы ...

Ответы на вопрос(4)

Ваш ответ на вопрос