我正在使用Microsoft的Prism框架編寫應用程序,並且遇到了處理簡單的「保存文件」樣式對話框的最佳方法時遇到的問題。
注意:我不能使用標準對話框,因爲我沒有將文件保存到文件系統,所以需要從頭開始寫類似的東西。在Prism中設計一個簡單的保存對話框
因此,這裏有我有我的對話框的主要控件:
- 用戶控制顯示文件夾的層次結構。 (
IFolderView
) - 列表視圖顯示文件夾的內容。 (
IFolderContentsView
) - 用戶輸入保存的文件名的文本框。
表單上唯一真正的交互是當用戶選擇左側的文件夾時,右側的列表視圖會填充文件夾內容。
當我開始編寫對話框時,我最初爲我的用戶控件創建了幾個區域,並使用視圖發現來添加我的視圖。我這樣做是因爲它在應用程序的其他地方注入了IFolderView
。我現在發現我需要了解該地區的控制措施,以便他們互相交流。我想到了EventAggregator
,但這並不適合簡單的保存對話框。
我對這個問題的解決方案是使用視圖注入。所以我要求我的Unity容器執行IFolderViewModel
,並將其視圖設置爲初始化期間該區域的內容。這樣我就足夠了解表單上的用戶控件以使其工作,但它仍然是鬆散耦合的。
這聽起來像是一個明智的事情嗎?有沒有更好的辦法?我錯過了什麼嗎?
謝謝您的答覆,但它是不是真的是我一直在尋找。我的問題是,當我知道他們在哪個區域時,我可以通過簡單的對話使兩個控件相互交談。儘管如此,您的回覆仍然對我有用,謝謝! – 2010-01-29 09:16:56
@JMitchell:這個描述更清晰。爲了讓兩個打開的視圖(以及它們的視圖模型)彼此交談,可以使用事件聚合器。但是,如果您需要雙向溝通,那可能不合適。在這種情況下,您可以使用我提出的相同接口,但要使目標視圖的ViewModel實現它,而不是Shell的中央服務。 – 2010-01-29 13:53:45