2011-01-10 16 views
1

這個問題的版本已被問到,但我不認爲它是重複的。我正在C#/ Prism4中構建一個LOB應用程序,並且我試圖從第一天開始就獲得架構。該應用程序將(最終)有相當多的主/細節屏幕加編輯屏幕與可編輯的嵌入式網格。例如:顯示能夠通過彈出屏幕添加或編輯的用戶列表。使用彈出對話框和Prism4的主細節

此刻,我想一個簡單的解決辦法是有對話作爲一個隱藏的面板數據綁定到其知名度通過數據綁定控制的相同視圖模型。要編輯用戶(使用上面的示例),請複製要編輯的數據,然後將IsInEditMode標誌設置爲true以顯示對話框。正常指揮可以捕捉'保存'/'取消'按鈕來更新模型(或不)。

雖然這聽起來很容易實現,但感覺有點不對。有一個問題的分離,它只是感覺像viewmodel被複用。

我所遇到的棱鏡InteractionRequest指導,但似乎對簡單的彈出窗口更適應(「你確定要取消?」)。

我需要一個擴展到數十個屏幕的解決方案。它必須簡單易維護。

在此先感謝。

回答

2

的一般方法是有一個與界面像這樣所謂的對話框服務:

public interface IDialogService 
{   
    bool? ShowDialog<TViewModel>(TViewModel viewModel); 
} 

,每當你需要顯示一個對話框調用ShowDialog方法傳遞一個視圖模型的對話框。剩下的服務就是這樣。它可以顯示一個隱藏的面板,真實的對話窗口或彈出窗口 - 它取決於實現,主叫方不知道任何事情。

+0

謝謝。 Prism4 doco涵蓋了交互服務或交互請求的使用,它是它的首選實現。這就是說,它似乎更多基於簡單的交互,如彈出一個yes/no對話框。我想我更關心如何最好地建立一個交換大量領域的真實對話的實質。它是否值得擁有自己的視圖和視圖模型,還是我可以將它視作自己的V/VM?對於這個問題,我正在開發一個單獨的V和VM--它具有更強的可擴展性,並減少了大量不可維護文件的風險。 – dave 2011-01-10 17:15:12

0

我不同意你的對話框總是應該有它自己的虛擬機,調用方可以傳遞它自己的DataContext,這是你如何不必關心同步的maser/child ViewModel,它沒有任何做與關注的分離。例如,您有一個用戶配置文件表單(maser),並且存在模態對話框地址 - 如果在關閉對話框後傳遞配置文件的虛擬機,您的地址相關屬性和視圖字段會自動更新(享受綁定)。

1

在我看來,主細節值得它自己(如果細節多個模型對象的VM部分可能是必要的)的景色。

這就是說,我肯定會用PopupRegionBehavior,那是RI的棱鏡2.2的一部分。這對於這種情況特別有用,因爲它允許您在特定區域註冊主要詳細信息視圖(並且如果您決定將詳細信息提取到Shell中,這仍然有效)。

many threads in the Prism forum at codeplex是談論這個。