我正在開發一個用 C# 和 WPF 撰寫的應用程式。
有一個視圖,其布局由三個獨立的部分(子視圖)組成。
- 包含當前主要內容的“內容”視圖(例如,產品串列視圖)。
- 位于其頂部的視圖,包含工具和選項控制元件。
- 左側的主選單視圖。

我對我的應用程式使用了 .NET 依賴項注入 ( Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.Configuration.Abstractions)
當為內容視圖設定了 ViewModel 時,我還想為頂視圖設定一個 ViewModel。這些 ViewModel 必須相互通信/參考。就像,當頂部 ViewModel 上的命令被執行時,內容 ViewModel 應該被通知和/或做一些事情,反之亦然。假設我有 aTopViewModel和 a ContentViewModel。我能做的一件壞事是:
- 需要
ContentViewModel在建構式TopViewModel - 并要求 的
TopViewModel建構式中的ContentViewModel。
當然這行不通,因為它是一個回圈參考。
我能想到的另一種方法是,只需要TopViewModel在建構式中使用ContentViewModel并且不要對另一個類做同樣的事情。的建構式代碼ContentViewModel然后可以偵聽 的事件TopViewModel。TopViewModel 對 一無所知ContentViewModel,如果出于某種邏輯原因需要參考它,這可能是一個問題。
某些內容視圖可以有多個頂部視圖(它們會在用戶選擇某些內容時發生變化)
我很認真地對待這件事。我能想到的一切對我來說都是丑陋和糟糕的做法。雖然我認為這是一個非常簡單和常見的情況。在不違反 OOP 規則的情況下,最好的、普遍接受的解決方案是什么?
uj5u.com熱心網友回復:
在不違反 OOP 規則的情況下,最好的、普遍接受的解決方案是什么?
您應該考慮使用事件聚合器以松散耦合的方式在視圖模型之間進行通信,而不是存盤從一個視圖模型到另一個視圖模型的直接參考。
這消除了視圖模型類之間的緊密耦合,并使您的應用程式更易于維護和隨著時間的推移而發展。
這個想法是訂閱者觀察事件聚合器而不是發布者,發布者只知道事件聚合器而不知道訂閱者。有關更多資訊,請參閱以下博客文章。
使用事件聚合器模式在視圖模型之間進行通信
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315351.html
下一篇:在計時器上獲取經過的時間
