我在Silverlight中有一個相當簡單的問題,我想用MVVM原理解決它,主要是作爲一種方式提高我自己的理解。多個「兄弟」控件,一次一個可見,MVVM
比方說,我有一個簡單的LOB應用程序,旨在讓我加載和編輯單個員工(僅作爲示例,爲了便於說明)。在我的示例中,員工由許多複雜對象組成 - 員工具有ContactInfo,Skillset,EmploymentHistory,AwardsEarned等等。想法是,我可以讓這個應用加載單個員工並訪問許多不同的編輯器屏幕。員工的每個組件都有其自己的編輯器屏幕。
在視覺上,應用程序只是左側的導航欄和右側的主視圖。導航欄只讓我輸入一個員工編號,並將其作爲「活躍」員工加載到內存中。它有一個簡單的鏈接列表 - 單擊一個鏈接應該在右側加載適當的編輯器屏幕。
有一些概念,我認爲我的理解不夠好,而且我遇到了麻煩。我知道永遠有不止一種方式來對一隻貓進行皮膚處理,特別是當涉及到WPF/Silverlight/XAML/MVVM時,但我在思考所有不同的概念和它們的反響時遇到困難。
查看優先或視圖模型首先
經過一番思考MVVM,看起來最自然的我是視圖模型組合物的約什 - 史密斯似乎在他經常引用的文章promote概念。這裏的想法似乎是,您通過將視圖模型組合在一起來逐字地建模您的UI,然後讓視圖模型通過類型化的DataTemplates呈現自己。這感覺就像是我非常好的關注點,它也使得視圖模型的溝通非常直接和易於理解。
當然,對於許多投訴,Silverlight在DataTemplates上沒有DataType屬性:one,two。無論如何,我所看到的比視圖模型組合更經常推廣的是更多視圖優先設計,其中視圖的視圖模型通常在視圖的XAML中或通過DI容器實例化,這意味着您無法將其任何參數傳遞給它。我很難理解這一點:如果我永遠無法告訴它模型中的數據,ViewModel應該如何爲模型提供視圖服務?通過觀點來達到它的視角模型似乎也沒有意義。我在這方面很朦朧,但似乎接受的答案是「使用中介/輕量級消息框架」。我現在只是在MVVMLight的消息傳遞系統上查看一些教程,我會研究類似的東西,如果只是爲了理解這些概念而已,但如果任何人都可以對此有所瞭解,我會非常欣賞它。任何涉及統一/棱鏡或MEF是有效的,但我還沒有得到那麼遠,我求知尚未:-)
實例化視圖,並選擇他們
理論上(我這樣說是因爲沒有按SL不支持DataTemplate DataType),視圖模型組合方法可以使這非常簡單。我可以讓屏幕的右側是內容控件,其內容屬性綁定到名爲ActiveEditor的屬性。超鏈接的參數化命令會將ActiveEditor設置爲給定的視圖模型。
用更多的觀點優先的方法,我將如何繼續這個?首先想到的是實例化主視圖的XAML中的所有控件。
操縱ContentControl的Content屬性是一種很好的方法去處理這種情況,還是我最好做一些事情,比如設置每個單獨控件的可見性?