[英]MVVM + Reactive + WCF callback
我正在对具有回调的TCP.NET WCF服务使用MVVM + Reactive Extensions。 所以我创建了一个接收回调的ClientProxy类。 我有一个ClientProxy,它有一个Subject,我在Model中订阅它。 现在我想要做的就是将收到的项目推送到ViewModel,而不必引用ViewModel。 注意(我已经改变了实际的项目名称,所以如果我有错误的东西,那我的代码就不是真的了)。
模型:
public Subject<CustomSale> CustomSaleAdded = new Subject<CustomSale>();
ClientProxy._onCustomSaleAdded.Subscribe(x =>
{
CustomSaleAdded.OnNext(x);
});
然后在我的ViewModel
,我只是尝试Subscribe
Model
Subject
CustomSaleAdded
并添加到我的ObservableCollection<Sale> Sales
:
_scheduleModel.CustomSaleAdded.Subscribe(x =>
{
Sales.Add(x);
});
发生的事情是该项目从ClientProxy
到Model
,我看到它触发CustomSaleAdded.OnNext(x)
。 但是在ViewModel
,我设置了一个断点,没有任何反应。
因此,能不能有人告诉我,这将是从一个WCF 推项目的最佳途径回调到一个ObservableCollection
在ViewModel
没有ViewModel
不必引用Model
采用无扩展?
另外,这是Reactive UI处理的东西吗?
我看到的大多数示例都显示了一个直接使用Web服务的ViewModel
。 我在模型中有两个额外的层,然后是ClientProxy
,它首先获取项目并推送它。
似乎不应使用Subject<T>
类来实现CustomSaleAdded
成员,因为Subject<T>
具有以下行为( Subject Class,Remarks部分 ):
然后,数据通过它的IObservable接口发布给所有订阅的观察者。
根本原因: ViewModel
类可以“遗漏”可观察序列的一些元素,以防ViewModel
在推送序列中的某些元素后进行预订。
请考虑使用ISubject<T>
接口的另一个实现:
ReplaySubject 缓冲它接收的项目 。 因此,稍后创建的订阅可以访问缓冲序列中的项目,即使它们已经发布。 ReplaySubject将缓冲多少项取决于传递给构造函数的参数。
BehaviorSubject缓冲它通过IObservable接口发布的最后一项。 如果没有通过其IObservable接口发布项目,则构造函数中提供的初始项目是当前缓冲的项目。 当订阅BehaviorSubject的IObservable接口时,发布的序列从当前缓冲的项开始 。
一旦其IObserver接口收到完成,就不会从BehaviorSubject缓冲或发布任何项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.