NSOutlineViewを使用してバインディングとNSTreeControllerをデータソースとデリゲートに変更した場合、モデルツリーが変更されると自動的にNSOutlineViewを更新しますか?ツリー内の各ノードのchildNodesプロパティをコントローラで監視し、変更が発生したときにリロードをトリガする必要がありますか?それとも別の方法がありますか?NSTreeControllerなしのモデル変更時に自動的にNSOutlineViewを更新
答えて
これは1つの方法です。もう1つの方法は、モデルが変更を通知したときに通知を送信し、コントローラがそれらの通知を観察するようにすることです。
また、モデルは通常、自発的に変化しません。通常、変更は何らかのイベントに応答してモデル外で開始されます。コントローラーが通常それをやっています。したがって、そのコントローラは、アウトラインビューの更新を引き起こす可能性もあります。 (複数のコントローラがあるかもしれないので、モデルの変更を開始するコントローラは、アウトラインビューの更新を担当するウィンドウまたはビューコントローラに通知するだけかもしれません)。
ここでは重複してマークされた:Recommended Pattern for Observing Changes in Tree Structure [duplicate]
NSTreeControllerの使用を避けたかったのは、アップデートが発生したときにアニメーションのコントロールが失われたということです。
MVVMをセットアップしました。私のモデルはグラフで、私のビューモデルはツリーです。ツリーノードとグラフノードの間には1対1の関係があります。上記の質問で詳述したように、ツリーノードとアウトラインビューとの間には、明らかに多くの関係があります。
だから、私は
...と和解ビューモデルツリーのノードは、その子が更新されたときに知っておく必要があり、その子が追加または削除されているとき、私はキャッチする関連するグラフノードのKVOを使用。
概要ビューの更新については、私がビューコントローラに実装しているモデルビューのデリゲートを解決しました。ビューモデル内の各ツリーノードは、子が追加または削除されたときにツリールート上にデリゲートメソッドを呼び出すことができます。これは私にとって最も明確なアプローチであり、容易にデバッグ可能であると感じました。私は物事の連鎖が舞台裏で起こることを望んでいませんでした。
最終アウトラインビュー更新呼び出しが満足のいく簡単フェルト:表セルビューレベルで
func itemsInserted(atIndexes indexes: IndexSet, forParent parent: ECViewModelNode) {
outlineView?.insertItems(at: indexes, inParent: parent, withAnimation: .slideDown)
}
Iグラフモデルノードの詳細に直接結合します。
- 1. モデル更新時の自動更新ページ
- 2. NSOutlineView、NSTreeController、willDisplayCell
- 3. 自動更新データ変更時のピボットテーブル
- 4. 変更時にVBA連結列を自動的に更新する
- 5. データソースの変更時にComboBoxが自動的に更新されませんか?
- 6. 更新自動的にプロパティ
- 7. フラグメントがクリック時に自動的に更新されない
- 8. 変更のリストビューを自動的に更新 - knockoutjsとJQuery Mobile
- 9. NSOutlineView/NSTreeControllerをフィルタリングする
- 10. 特定の時刻に自動的にデータベースを更新する
- 11. 親コンテナのサイズ変更時にdojo dijit.Gridウィジェットのサイズを自動的に変更
- 12. Railsのモデル変更を自動的に追跡する
- 13. DevExpress更新後に自動的にASPxGridViewを更新する
- 14. Google Playサービスの更新を自動的に更新する
- 15. Infragistics - データソースの変更時に自動的に更新されるultrawingridを無効にします。
- 16. PHPのコンテンツ.txtファイルの変更時に自動的にサイト内のデータを更新します。
- 17. 自動的に更新するには?
- 18. 自動的にページを更新する
- 19. Dynamodb - GSIを自動的に更新
- 20. フィールドを自動的に更新する
- 21. 自動的にウェブサイトを更新する
- 22. 自動的にパワーピボットデータを更新する
- 23. ページリンクを自動的に更新する
- 24. IDを自動的に更新する
- 25. JTextAreaを自動的に更新
- 26. アップロード時にDropBoxがファイルの名前を自動的に変更しない
- 27. ASP.NET CoreのAngular 2 Appの変更を自動的にブラウザに更新
- 28. Gulp.js - 変更/保存時にビューを自動的にアップロード
- 29. gitでコミット時にバージョンファイルを自動的に変更
- 30. 展開時に自動的に開閉棒を変更する
私のケースでは、ユーザーのやりとりに関係しない特定のイベントに基づいて、モデル自体が変更される可能性があります(ノードが子を追加または削除します)。ありがとうございました! – DrummerB