天天看點

WPF學習筆記:MVVM模式下,ViewModel如何關閉View?

原文:http://blog.csdn.net/leftfist/article/details/32349731

矯枉過正,從一個極端走向另一個極端。MVVM模式,View隻負責呈現,雖然也有背景代碼,但基本上就是擺設,VM接管了一切的邏輯處理。

那麼,現在,大能的VM已經完成了所有的事情,這個視窗V如何才能自動關閉呢?

據我目前少得可憐的WPF知識可知,有兩種方案:

方案一、利用View裡的IsEnable屬性。

原理是這樣的:

1、UI中的IsEnabled綁定VM中的屬性

2、UI的背景代碼中,注冊IsEnableChange事件,在這個事件裡,檢測到傳過來的值滿足某個條件,即可觸發Close()指令

如此,VM控制自己那個屬性就能達到關閉V的目的了。

沒代碼我說個J8:

UI

UI背景代碼

VM

方案二、用Invoke

1、UI背景代碼:

2、VM代碼:

兩種方法,無疑第一種比較符合MVVM的思想。VM發出關閉的信号,觸發V進行關閉,如何關閉,何時關閉,都由V自己控制;

而方案二,通過調用的方式來直接進行關閉,好像有點越俎代庖?

但是,IsEnable本意是用來控制失效和使能的,卻被用于關閉UI,反而失去了控制失效使能的作用,有時會不友善。