簡體   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