IObservable<IObservable<T>> observable
이 있으면 내 표류를 잡으면 Merge
을 호출하면 새로운 부모의 자녀가 포함됩니다. 트릭은 ObservableCollection<IObservable<Thing>>
을 IObservable<IObservable<Thing>>
으로 변환합니다.
ReactiveUI가 실행 중이고 정상적으로 사용하는 경우 ObservableCollection<IObservable<Thing>>
을 ReactiveCollection<IObservable<Thing>>
으로 변환 할 수 있습니다. ReactiveCollection
은 ObservableCollection
에서 상속되며 IObservable
도 구현됩니다.
ReactiveUI (나는 이미 Caliburn 마이크로 컬렉션을 사용하고 있기 때문에 그것이 같은데요) 문제를 벗어나면, 당신은 ObservableCollection
의 이벤트를 사용하여 변환 할 수 있습니다
ObservableCollection<IObservable<Thing>> observableCollection = new ObservableCollection<IObservable<Thing>>();
IObservable<IObservable<Thing>> oCollectionObservable = Observable.FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
h => observableCollection.CollectionChanged += h,
h => observableCollection.CollectionChanged -= h
)
.SelectMany(ep => ep.EventArgs.NewItems.Cast<IObservable<Thing>>());
: 다음 클래스를 사용
oCollectionObservable
.Merge()
.Subscribe(t => Console.WriteLine($"Received Thing {{Id = {t.Id}}}"));
var firstObservable = Observable.Range(1, 5)
.Select(i => new Thing { Id = i })
.Concat(
Observable.Range(8, 5)
.Select(i => new Thing { Id = i })
.Delay(TimeSpan.FromSeconds(2))
);
observableCollection.Add(firstObservable);
var subject = new Subject<Thing>();
observableCollection.Add(subject);
subject.OnNext(new Thing { Id = 6 });
subject.OnNext(new Thing { Id = 7 });
: 여기에 몇 가지 예제 코드를 보여 소용210
Thing Observables를 소장하는 컬렉션 유형은 무엇입니까? – Shlomo
@Shlomo 오, 내가 언급 했어야합니다. 그것은 ObservableCollection (더 정확하게는 Caliburn.Micro BindableCollection)입니다. – TeaDrivenDev
나는 또한 당신이'class Thing : IObservable'을 가지고 있지 않다고 가정하고 있습니다. 오식? 아마'class Thing : IObservable '을 의미했을까요? –
Shlomo