它爲我留下誰不清楚是誰創建和配置WPF中的窗口。
正如我們所知,可以通過單擊右上角的十字標誌來關閉窗口,只有在關閉事件處理程序中設置取消= true,我們才能停止關閉。
對我來說,ViewModel決定View是否被允許關閉是很自然的。我認爲這是虛擬機如何請求適當窗口的實例化。
在我們的項目中,我們創建IViewManager
:誰負責MVVM模式中的Window View lifecylce?
public interface IViewManager
{
void ShowView();
void CloseView();
}
public interface IWindowedViewModel : IDisposable
{
bool IsEnabled {get;set;}
WindowState WindowState {get;set;}
Visibility Visibility {get;set;}
bool IsActive {get;set;}
bool CanBeClosed();
}
因此,我們的虛擬機通過綁定和間接通過IViewManager
的觀點交流。 在目前爲止我所見過的MVVM應用程序的例子中,VM是非常被動的,並不負責View的生命週期。這就是爲什麼我對我們的設計有些懷疑。
我不確定我們不會錯過關於MVVM模式的重要內容。
如果我沒有理解你的問題,那麼我認爲View(Window/UserControl)本身就是LifeCycle的負責人。 View通過DataContext引用VM,當Window關閉時,它被Disposed,所以你的虛擬機將會被釋放。 – ethicallogics
@ethicallogica但是,在邏輯禁止時,可以選擇關閉視圖(窗口):例如我們有一些未保存的更改。我們應該如何正確處理這種情況? –