[英]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.