繁体   English   中英

MVVM + Reactive + WCF回调

[英]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);
});

发生的事情是该项目从ClientProxyModel ,我看到它触发CustomSaleAdded.OnNext(x) 但是在ViewModel ,我设置了一个断点,没有任何反应。

因此,能不能有人告诉我,这将是从一个WCF 项目的最佳途径回调到一个ObservableCollectionViewModel没有ViewModel不必引用Model采用无扩展?

另外,这是Reactive UI处理的东西吗?

我看到的大多数示例都显示了一个直接使用Web服务的ViewModel 我在模型中有两个额外的层,然后是ClientProxy ,它首先获取项目并推送它。

似乎不应使用Subject<T>类来实现CustomSaleAdded成员,因为Subject<T>具有以下行为( Subject Class,Remarks部分 ):

然后,数据通过它的IObservable接口发布给所有订阅的观察者。

根本原因: ViewModel类可以“遗漏”可观察序列的一些元素,以防ViewModel 推送序列中的某些元素后进行预订。

请考虑使用ISubject<T>接口的另一个实现:

  • ReplaySubject类

    ReplaySubject 缓冲它接收的项目 因此,稍后创建的订阅可以访问缓冲序列中的项目,即使它们已经发布。 ReplaySubject将缓冲多少项取决于传递给构造函数的参数。

  • BehaviorSubject类

    BehaviorSubject缓冲它通过IObservable接口发布的最后一项。 如果没有通过其IObservable接口发布项目,则构造函数中提供的初始项目是当前缓冲的项目。 当订阅BehaviorSubject的IObservable接口时,发布的序列从当前缓冲的项开始

    一旦其IObserver接口收到完成,就不会从BehaviorSubject缓冲或发布任何项目。

其他参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM