我有一個View/ViewModel,其中加載了一個ProductList。該列表在屏幕上不可見。將一個集合傳遞給viewmodel並返回一個選定的項目
我需要做的是顯示一個新的View/ViewModel(例如SelectProductView/SelectProductViewModel),將ProductList傳遞給它們,並且在用戶選擇特定產品後關閉此視圖並使用選定的產品。
達到此目的的最佳方法是什麼?
我正在使用MVVMLight,但我想這個想法不應該僅限於它。 最簡單的方法是創建一個視圖,並將集合傳遞給它,但這聽起來不像MVVM友好。我正在考慮從第一個ViewModel創建SelectProductViewModel並將其傳遞給它,但我不知道如何自動創建SelectProductView並將其綁定到創建的SelectProductViewModel。
編輯:在我的應用程序視圖結構有點複雜。我有一個主視圖,基本上需要託管一個SelectProductView,因爲此視圖必須覆蓋整個屏幕。 MainView包含許多子孫視圖(通過選項卡),因此可能會有3個不同的子視圖或grand childView可能發出請求來選擇產品。另外,某些視圖不會預裝產品,因此應將此任務傳播到SelectProductViewModel。結構
例子:
MainView
/ \
ChildViewA ChildViewB
/\ / \
GrandChildViewA1 GrandChildViewA2 GrandChildViewB1 GrandChildViewB2
所以,GrandChildViewA1,ChildViewB和GrandChildViewB2可以發出對產品的要求進行選擇。只有發出請求的觀點才能獲得所選產品,而其他人則不應該爲此而煩惱。 GrandChildViewA1將在其中加載產品,但GrandChildViewB2不會在其中加載ProductList。這意味着,出於性能考慮,GrandChildViewA1應將產品列表傳遞給SelectProductViewModel,而GrandCHildViewB2不會在其中包含Product列表,因此SelectProductViewModel應該從數據庫中獲取數據。
本傑明您好,我有幾個問題:1)爲什麼我需要數據和SelectedProduct屬性? 2)我編輯了一個問題以提供更多信息,那麼您能否詳細說明如何實例化SelectProductViewModel以及如何通知感興趣的視圖選擇特定產品? – Goran
1)你沒有。你可以擺脫通用的ViewModel,並使用SelectProductViewModel。我使用通用ViewModel的唯一原因是,父ViewModel不必知道SelectProductViewModel的具體實現細節,儘管我承認在完成解耦之前需要做更多的工作。這個想法是爲有興趣在選擇「數據」時被通知的各方簽訂合同。 2)你如何/在哪裏實例化ViewModel取決於你。 –
問題不僅在於如何實例化視圖模型,而是關於實例化,等待完成其工作,關閉和獲取結果的整個過程。在你的例子中。如何調用「first ViewModel」,知道獲取Data屬性的值? – Goran