2013-02-18 113 views
0

的多個實例我要顯示多個圖形/圖表「縮略圖」的要求。點擊其中一個將顯示一個「展開視圖」(在單獨的面板中),顯示圖表的大圖,以及查看和操作圖表的控件。MVVM - 動態創建視圖/視圖模型

將會有許多不同的圖表,以不同的方式繪製每個我的數據。此外,給定的圖表類型可能會出現多次,每個繪製一個不同的數據子集。 「展開」視圖中的控件也會因圖表類型而異,因此這裏沒有什麼共同之處。

我很努力想知道如何在MVVM中對所有這些進行建模,尤其是考慮到需要動態創建未知數量的縮略圖(以及某些情況下同一類型的多個實例)。

自言自語,我想我需要一個視圖/視圖模型表示單個縮略圖(視圖包含的圖表組件和VM暴露數據來繪製)。我想我還需要一個用於「縮略圖列表」UI的V/VM,負責創建縮略圖並通過一個集合公開它們以便綁定到列表。但它是如何實例化這些的?虛擬機被注入到它的視圖中,這表明「縮略圖列表」虛擬機將不得不動態實例化縮略圖視圖 - 但是虛擬機如果它不應該具有視圖的知識?!最後,當我顯示「擴展」視圖時,將縮略圖中使用的圖表組件/視圖傳遞給它,以避免再次渲染圖表是有意義的,但是怎麼做?

如果是相關的/有幫助,我使用溫莎城堡依賴注入,和棱鏡的導航功能。

回答

1

這確實是一個複雜的話題,...

我會建議一個VM的圖標列表不一定是圖標本身。這可以綁定到IconListViewModels的性質。那麼你應該考慮ChartViewModelFactory。這與您的DIC一起工作。

一個重要的討論是VM-V的婚姻。首先查看模型或查看模型...一種方法也可以是ViewResolver,如果它根據您的視圖模型返回匹配的視圖...這可以依賴於某種約定。所以最終的步驟可以要求工廠視圖模型找到匹配的視圖粘在一起,並將其綁定到內容展示...

我希望這有助於讓你開始...

+0

關於單個'IconListViewModels'虛擬機 - 不知道我可以將每個拇指的數據作爲一個單獨的屬性公開,因爲「數據集」的數量在運行時會有所不同。我可以使用一個數組,但我怎樣才能配置每個拇指視圖綁定到該屬性的不同元素?我想將數據集傳遞給'ViewResolver',然後將其分配給視圖的DataContext。你已經指出了我正確的方向,並給了我一些想法。我還沒有想過將視圖綁定到ContentPresenter - 好的提示! – 2013-02-18 14:36:16

+0

這取決於總是......我的觀點是保持嵌套虛擬機低。想一想如果它必須是一個複雜的ViewModel或只是一些屬性......但我沒有看到任何代碼,所以沒有評委在這裏。但建議可能是:在IconListViewModel應包含OberservableCollection ...也可能是的ObservableCollection 。很高興我能幫上忙。請標記q。作爲回答,如果它有幫助=) – silverfighter 2013-02-19 10:48:23