2012-08-03 68 views
1

我有一個WPF對話框(Window的繼承者)。該對話框有一個「OK」按鈕,該按鈕綁定到ViewModel上的「process」命令。 (「process」命令是Josh Smith RelayCommand。)「OK」按鈕上的CommandParameter被設置爲對話窗口本身。如果處理成功,則從ViewModel的命令處理程序中關閉對話框窗口。這對我來說似乎違反了單一責任原則。 Command可以或不可以關閉調用者窗口的正確模式是什麼?正確設計一個關閉調用者窗口的命令?

回答

1

雖然它看起來像是一些設計模式被破壞了,但ViewModel可能會意識到它的視圖以實現特定任務(如關閉對話框或設置特定狀態)的常見做法。

在View-ViewModel綁定過程中,ViewModel可以通過引用View來初始化。稍後通過執行命令,ViewModel可以使用視圖使用通用接口提供的功能。

在你的情況下,我建議這樣做(如Caliburn Micro一樣),而不是像CommandParameter那樣傳遞窗口。

+0

因此,Caliburn.Micro使用類命名約定來定位視圖。我也不確定我喜歡那樣。我喜歡你在施工時間通過的想法,但這帶來了後續問題。通常我喜歡在視圖的資源部分構建ViewModel類。我喜歡這個,因爲我在XAML中爲ViewModel屬性獲得了Intellisense。有沒有一種很好的方法來在XAML中構造這些東西,同時還支持對ViewModel進行IoC類型的初始化? – Brannon 2012-08-03 22:10:03

相關問題