我開始使用MVVM和Castle Windsor開發我的第一個WPF項目。我遵循相當標準的方法將視圖模型注入其視圖的構造函數,然後將其DataContext設置爲視圖模型。我不清楚的是如何/在哪裏執行任何UI「初始化」,我想在窗口加載後立即發生(在我的情況下,我想實例化一些用戶控件「小部件」,並把它們放在窗口的畫布)。WPF MVVM和依賴注入
大概我不能在窗口的視圖模型的構造函數中這樣做,因爲它將在視圖的InitialiseComponent被調用之前調用。此外,我甚至會如何從視圖模型中引用畫布,而視圖模型應不知道視圖?
由於試圖解決這一部分,我創建了一個「DesktopManager的」組件負責添加用戶控件到畫布上,但我得到循環引用: -
- 的觀點顯然對依賴查看模型
- DesktopManager具有對視圖(它需要訪問畫布)的依賴性,視圖模型對DesktopManager具有依賴性(因此它可以告訴DesktopManager創建窗口小部件)。
儘管DesktopManager仍然不會幫助我 - 回顧我以前的問題,我不知道如何/在哪裏調用它來創建小部件。我清楚這些都是錯誤的,也許回答我先前的問題也會解決這個問題!
任何建議表示讚賞。
安德魯
有什麼理由,你不能做對視圖的(右後'的InitializeComponent()')構造函數?我還會尋找一種解決方案,不需要我在代碼中添加小部件。如果可能,儘量在XAML中完成。 – Robaticus
將會有邏輯確定應該加載哪些小部件,因此視圖模型似乎是合乎邏輯的選擇。我認爲在MVVM中最好避免向代碼隱藏添加代碼? –
這是一個謬誤。目標是避免在視圖的代碼隱藏中放入與視圖無關的事物。不要以MVVM的名義做維護和開發更復雜的事情。務實。 – Robaticus