У меня есть класс, реализующий интерфейс IObservable. В xaml разметке я указал объект этого класса, как источник данных для списка, однако содержимое списка не обновляется.
Вот реализация интерфейса:
private List<IObserver<History>> observers = new List<IObserver<History>>();
public IDisposable Subscribe(IObserver<History> observer)
{
if (!observers.Contains(observer))
observers.Add(observer);
return new Unsubscriber(observers, observer);
}
private class Unsubscriber : IDisposable
{
private List<IObserver<History>> observers;
private IObserver<History> observer;
public Unsubscriber(List<IObserver<History>> observers, IObserver<History> observer)
{
this.observers = observers;
this.observer = observer;
}
public void Dispose()
{
if (observer != null && observers.Contains(observer))
observers.Remove(observer);
}
}
public void SendChanges()
{
foreach (IObserver<History> observer in observers)
{
observer.OnNext(this);
}
}
Вот классы, которые сигнализируют об обновлении коллекции:
public void Add(Action item)
{
current.Append(item);
current = item;
SendChanges();
}
public void Clear()
{
current = start;
start.Break();
SendChanges();
}
Вместо IObservable<T>
реализовал INotifyCollectionChanged
. Теперь функции изменения коллекции выглядят так:
public event NotifyCollectionChangedEventHandler CollectionChanged;
public void Add(Action item)
{
if (current.next != null) CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, current.next.Tail()));
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, new List<Action> { item }));
current.Append(item);
current = item;
}
public void Clear()
{
current = start;
start.Break();
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
Теперь все работает.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
есть 2 формына первой, допустим, кнопка открывающая 2-ю форму, на которой есть ползунок TrackBar
когда-то давно уже задавался этим вопросом, но без особых успеховРечь идёт о полупрозрачном размытом фоне, да ещё и с шумами(собственно как...
Есть отличная статья-ответ, которую наверное можно как некий справочник использовать когда необходимо освежить некоторые моменты в понимании...
Понял, что немножко протупил, забыв переопределить метод Equals (object obj)После этого все заработало