當我用當前的應用程序解決越來越多與MVVM相關的問題時,更多的只是不斷彈出。 :)將MVVM應用到用UserControls填充的ItemsControl中
我想要替換的當前實現涉及一個StackPanel,其子代或多或少動態生成(通過查找配置文件)。每個孩子都是一個UserControl的實例。之前,我所做的是爲StackPanel指定一個名稱,然後在Window_Loaded事件處理程序中,我只需確定所需數量的子項,爲每個實例化一個UserControl,併爲UserControl分配一個ID,以便知道點擊特定UserControl實例的按鈕的正確來源;每個UserControl上有3個按鈕。
所以我知道我想將StackPanel綁定到一個集合。這當然是不可能的,因爲我需要使用從ItemsControl派生的東西,比如ListBox或ListView(或者甚至ItemsControl本身)。爲了在MVVM-ifying的第一次迭代中保持簡單,我只使用一個ListBox。
現在的問題是,如果我的代碼隱藏的ObservableCollection是一個ObservableCollection?我相信這意味着無論我如何使用我的GUI,這個ListBox將始終有子項,但是它們在MyUserControl的XAML文件中執行。我想這也是可定製的,但我認爲這意味着我必須將MVVM模式應用於UserControl。
我不需要每個ListItem都有不同的模板,但我絕對要堅持使用MVVM風格。事實證明,無論如何,我無法做我曾經提出的建議,因爲UserControl已經引用了ViewModel,因此我最終得到了一個循環引用。 我會給這個ViewModel方法一個鏡頭,看看它需要我。謝謝! – Dave 2010-01-04 19:13:17
是的 - 每個Item都可以是一個獨立的ViewModel類,這意味着它將獲得自己的模板(如果您爲每個ViewModel設置DataTemplate以將其映射到適當的View)。這可以是一個單獨的UserControl。我一直這樣做 - 它基本上使它成爲一個虛擬機列表,完全獨立於視圖 - 純粹的MVVM :) – 2010-01-04 19:15:33
我只是在旁邊試圖幫助Expression Blend論壇中的某個人,但我會研究這種使用DataTemplates將VM綁定到V的方法。這不是我之前做過的,甚至聽說過的。我只是喜歡嘗試應用MVVM--我發現我通過這個過程學習了更多關於WPF的內容!謝謝你的建議! – Dave 2010-01-04 19:53:18