如果我使用綁定和NSTreeController將數據源和委託更改爲NSOutlineView,如果我的模型樹更改,如何自動更新NSOutlineView?我應該使用我的控制器觀察樹中每個節點的childNodes屬性,並在發生更改時觸發重新加載?還是有另一種方式?在沒有NSTreeController的模型更改時自動更新NSOutlineView
0
A
回答
1
這是一種方法。另一種方式是在模型發生變化時發佈通知,讓您的控制器觀察這些通知。
此外,模型通常不會自發地改變。通常情況下,更改是在模型外部響應某個事件而啓動的。控制器通常是這樣做的。所以,該控制器也可能會引發對大綱視圖的更新。 (可能有多個控制器,所以也許發起模式改變只是通知窗口或視圖控制器,這將是負責更新大綱視圖控制器)。
0
我問標記爲複製此類似的問題:Recommended Pattern for Observing Changes in Tree Structure [duplicate]
我想避免使用NSTreeController,因爲它意味着當更新發生時您將失去對動畫的控制。
我有一個MVVM設置。我的模型是一個圖形,我的視圖模型是一棵樹。任何樹節點和圖節點之間都有一對一的關係。如上面問題中詳細描述的那樣,樹節點和大綱視圖之間顯然存在多種關係。
所以,我......
視圖模型樹節點需要知道當他們的孩子被更新解決,所以我用相關的圖形節點的志願當孩子添加或刪除捕捉。
對於大綱視圖更新,我決定在視圖控制器上實現的模型視圖委託。當添加或刪除子視圖時,視圖模型中的每個樹節點都可以調用樹根上的委託方法。這對我來說是最清晰的方法,並且易於調試。我不想在幕後發生一連串的事情。
最終大綱視圖更新呼叫氈令人滿意簡單:
func itemsInserted(atIndexes indexes: IndexSet, forParent parent: ECViewModelNode) {
outlineView?.insertItems(at: indexes, inParent: parent, withAnimation: .slideDown)
}
在我直接綁定到圖模型的節點的細節的表格單元視圖的水平。
相關問題
- 1. NSOutlineView沒有更新
- 2. AngularJS模型在手動更改選項後沒有更新
- 3. 更新模型塊時自動更新「修改」字段
- 4. NSOutlineView/NSTreeController沒有將其刪除
- 5. 自動更新沒有模型的表格中的時間戳
- 6. 當verbose_name更改時,如何自動更新模型的ContentType?
- 7. 過濾NSOutlineView/NSTreeController
- 8. NSOutlineView,NSTreeController和willDisplayCell
- 9. 當模型更改時自動更新jtable列
- 10. 在backbone.js中更改視圖時自動更改模型字段
- 11. 網格沒有更新在angularjs模型的更改
- 12. 更新模型時,是自我更新
- 13. 與NSOutlineView使用NSTreeController
- 14. 即使沒有更改,MYSQL時間戳列自動更新?
- 15. 更新模型更新不及時更改的數據類型
- 16. Django模型沒有更新
- 17. Cakephp沒有更新模型
- 18. Ajax自動更新沒有更新
- 19. 模型更改時更新JxTreeTable
- 20. 更改模型時更新UI
- 21. 模型更改時更新Eclipse JFace Treeviewer?
- 22. Angular 2在更改Node中的變量/模型時沒有更新UI
- 23. Joomla 1.5沒有更新模板更改
- 24. 模型更改ContainerView更新
- 25. 選擇沒有更新的時候NG-模型改變
- 26. 更新MySQL行時自動更改
- 27. 視圖模型更改後沒有視圖更新
- 28. AngularJS - 模型更改沒有更新視圖
- 29. Angularjs在模型更新後沒有更新ng-repeat的視圖
- 30. NSTreeController,NSOutlineview和核心數據
在我的情況下,有可能是模式的基礎上不相關的用戶交互的某些事件改變自身(節點添加或刪除自己的孩子)。我會考慮使用全球通知,謝謝! – DrummerB