想象一下,您有兩個視圖,ViewModel InfoViewModel顯示有關人員的信息,ViewModel SearchViewModel處理搜索人員和選擇結果。使用棱鏡導航將數據返回到以前的ViewModel
我希望InfoViewModel能夠啓動一個搜索過程,最終將導致SearchViewModel告訴視圖InfoViewModel有人被選中。另一個潛在的要求是,InfoViewModel可以與SearchViewModel進行通信,說這個結果是不可接受的,並且用戶應該選擇其他人(這應該在沒有搜索結果屏幕消失並重新出現的情況下發生)
通常這很容易解決InfoViewModel給SearchViewModel一個回調,只要選擇了一個結果就會被調用。該回調函數還可以有一個返回參數,指定結果是否良好,以便SearchViewModel可以清理自己。然而,看起來Prism似乎不鼓勵這種做法,因爲至少在棱鏡4.0中,沒有一種好的方法來將對象作爲參數進行導航(您只能將字符串作爲參數傳遞)。我使用的一種解決方法是使用服務來存儲對象參數,然後可以通過字符串guid在下一個視圖中唯一標識這些對象參數。這有它自己的問題,但更糟糕的是,感覺像棱鏡有意設計反對這樣做。
另一種方式似乎是當選擇一個人時使用IEventAggregator廣播事件。我必須根據唯一的ID來過濾每個事件,以確保我收到的事件適合我(由於某種原因有兩個搜索過程正在進行)。感覺這種方式只是試圖模仿直接回調,但以一種迂迴的方式。
有誰知道一個很好的解決方案嗎?如果答案是在Prism 4.0中沒有解決這個問題的好方法,那麼你必須使用Prism 5.0(因爲它支持傳遞對象參數),那也沒問題。我只是想知道還有什麼其他的想法