我正在使用Observable.Merge合併多個序列並在UI中的單個視圖中顯示。用戶可以選擇添加或刪除UI中的序列(供稿)。雖然我已經使用合併來合併提要。我不知道如何從合併序列中分離IObservable。目前,我正在創建一個全新的IObservable,省略我想要的提要。是否可以動態添加和刪除ViewModel已經訂閱的IObsevable?從合併序列中刪除IObservable
2
A
回答
0
這可能會幫助你開始,但在重新連接,由於B是冷的,B將重新從頭開始:
var a = Observable.Generate('A', x => x <= Char.MaxValue, x => ++x, x => x, x => TimeSpan.FromMilliseconds(200)).Select(x => "a: " + x).Publish();
var b = Observable.Generate('a', x => x <= Char.MaxValue, x => ++x, x => x, x => TimeSpan.FromMilliseconds(500)).Select(x => "b: " + x).Publish();
var merged = a.Merge(b).Publish();
var submerged = merged.Subscribe(x => x.Dump());
var subA = a.Connect();
var subB = b.Connect();
merged.Connect();
Task.Delay(2000).ContinueWith(t => subB.Dump("Disposing b.").Dispose());
Task.Delay(4000).ContinueWith(t => b.Connect()).ContinueWith(_ => "Reconnected to b");
編輯:
要添加另一個 'C' 的合併IO:
var a = Observable.Generate('A', x => x <= Char.MaxValue, x => ++x, x => x, x => TimeSpan.FromMilliseconds(200)).Select(x => "a: " + x).Publish();
var b = Observable.Generate('a', x => x <= Char.MaxValue, x => ++x, x => x, x => TimeSpan.FromMilliseconds(500)).Select(x => "b: " + x).Publish();
var c = Observable.Generate('1', x => x <= Char.MaxValue, x => ++x, x => x, x => TimeSpan.FromMilliseconds(100)).Select(x => "c: " + x).Publish();
var merged = a.Merge(b).Merge(c).Publish();
var submerged = merged.Subscribe(x => x.Dump());
var subA = a.Connect();
var subB = b.Connect();
merged.Connect();
Task.Delay(2000).ContinueWith(t => subB.Dump("Disposing b.").Dispose());
Task.Delay(4000).ContinueWith(t => b.Connect()).ContinueWith(_ => "Reconnected to b".Dump());
Task.Delay(6000).ContinueWith(t => c.Connect()).ContinueWith(_ => "Connecting to c".Dump());
1
在使用IObservable<IObservable<T>>
看一看,然後使用Merge
。這會自動讓您通過結束內部IObservable<T>
來刪除序列。簡單。
1
像這樣的東西也可以,但我懷疑有更乾淨的方法。
class Merger<T>
{
Subject<T> _merged = new Subject<T>();
public IObservable<T> Merged { get { return _merged; } }
public IDisposable Add(IObservable<T> newStream)
{
return newStream.Subscribe(_merged);
}
}
要刪除合併的流的東西,了IDisposable處置。
相關問題
- 1. 刪除並從列表中
- 2. 合併列和刪除NA
- 3. PHP - 陣列合併 - 刪除數組鍵從數組合並
- 4. 從每個變量(列)中刪除NAs併合併案例
- 5. 合併和刪除R中的列
- 6. git從合併中刪除文件
- 7. 刪除元素,並從列表中刪除下列元素
- 8. 從可觀察集合中刪除項並稍後刪除
- 9. 從排列中刪除組合
- 10. 從複合主鍵中刪除一列
- 11. 從混合陣列中刪除密鑰,並重新編號
- 12. PLSQL合併刪除
- 13. PHP從陣列集刪除父級陣列和合並節點
- 14. 合併兩列進一個,刪除colnames
- 15. 合併散列刪除算法
- 16. Powershell .csv與列合併刪除
- 17. IBM Worklight JSONStore |從集合中刪除文檔並從內存中刪除
- 18. 從合併請求中刪除文件,但不是從git中刪除文件
- 19. 從Matlab/Octave中的矢量中識別(並刪除)序列
- 20. 合併排序刪除重複
- 21. 合併排序:堆損壞刪除[]
- 22. 合併兩個事件進入的IObservable
- 23. 重新訂閱的IObservable後合併
- 24. TFS修改合併刪除要合併而不刪除
- 25. 從表中刪除,並刪除文件
- 26. 刪除文件並從列表中刪除它的名字
- 27. 從Github刪除合併分支
- 28. 從歷史Git刪除合併
- 29. 從git master刪除合併文件
- 30. 從集合中刪除
可以說我必須在命令中添加c。我是否必須再次合併所有內容並調用a,b,c上的連接併合並? – anivas
不,你可以合併,然後連接到任何你想要的c;我更新了代碼來演示它。 HTH。 :) –
幾乎在那裏。但我不知道c的參數,它可以運行多達100個不同的提要。所以不能先合併。必須根據請求進行合併。 – anivas