【发布时间】:2020-08-08 14:30:56
【问题描述】:
考虑让两个 SourceCaches 使用不同的密钥:
var sourceCacheA = new SourceCache<MyType, int>(x => x.Prop1);
var sourceCacheB = new SourceCache<MyType, string>(x => x.Prop2);
两者都连接在哪里:
var observableA = sourceCacheA.Connect();
var observableB = sourceCacheB.Connect();
假设observableA 绑定到ReadOnlyObservableCollection,如下所示:
observableA.ObserveOn(RxApp.MainThreadScheduler).Bind(out _targetCollection).Subscribe();
如何构建一个可在运行时更改的可观察对象,同时绑定到相同的_targetCollection。
所以基本上,它应该像这样运行:
if(somethingHappenBool)
{
**observableA**.ObserveOn(RxApp.MainThreadScheduler).Bind(out _targetCollection).Subscribe();
}
else
{
**observableB**.ObserveOn(RxApp.MainThreadScheduler).Bind(out _targetCollection).Subscribe();
}
编辑:
根据 Jason 的回答,我想出了以下解决方案:
public enum SwitchDataSourceOption
{
SourceA,
SourceB
}
public SwitchDataSourceOption Option
{
get => _option;
set
{
_option = value;
NotifyPropertyChanged(nameof(Option));
}
}
sourceCacheA = new SourceCache<MyType, int>(x => x.AProp);
sourceCacheB = new SourceCache<MyType, int>(x => x.BProp);
this.WhenAnyValue(x => x.Option)
.Select(opt => opt == SwitchDataSourceOption.SourceA ? sourceCacheA : sourceCacheB)
.Switch()
.AsObservableCache()
.Connect()
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out _targetCollection)
.Subscribe();
但是,我不知道如何处理各种密钥类型,因为在我的原始示例中,我有 int 和 string 作为密钥
【问题讨论】:
标签: c# system.reactive dynamic-data rx.net