В этом руководстве рассказывается, как работает преобразование https://reactiveui.net/docs/handbook/collections/
Но подведу итог.
public class MyClass
{
private readonly ReadOnlyObservableCollection<MyType> _myItems;
public MyClass()
{
base.Items
// This makes a IObservable<IChangeSet<T>> which describes the changes
.ToObservableChangeSet()
// this will make sure you get the MyType
.Filter(x => x is MyType)
// This will convert them into MyType instances.
.Transform(x => (MyType)x)
// This is mostly only needed if your source allows multi threading
.ObserveOn(RxApp.MainThreadScheduler)
// This will make your _myItems keep in sync with what's done above
.Bind(out _myItems)
.Subscribe();
}
public ReadOnlyObservableCollection<MyType> MyItems => _myItems;
}
Стоит отметить пару вещей.
DynamicData использует типы .NET для представления внешнему миру, например ReadOnlyObservableCollection, а не для представления своих собственных типов.
IObservable> (и IObservable>) - это две базовые наблюдаемые, из которых можно создавать производные функциональные возможности. IObservable> указывает, что изменилось в коллекции. При первом использовании ToObservableChangeSet () он генерирует текущее состояние коллекции.
SourceList и SourceCache поддерживают многопоточность и оптимизированы для создания IObservable> и IObservable>. Обычно SourceList / SourceCache предназначены для ваших классов, и вы предоставляете их с помощью метода Bind (). Вы генерируете наборы изменений, используя для них метод Connect ().
ObservableCollectionExtended - хорошая однопоточная коллекция, в которой вам не нужно выполнять производную функциональность.