不外乎兩種基本方法。
消息通知和參數傳遞。
一、消息通知
利用View里的IsEnable屬性
原理是這樣的:
1、UI中的IsEnabled綁定VM中的屬性
2、UI的后台代碼中,注冊IsEnableChange事件,在這個事件里,檢測到傳過來的值滿足某個條件,即可觸發Close()命令
如此,VM控制自己那個屬性就能達到關閉V的目的了。
二、參數傳遞。
根據參數傳遞的不同。分為傳遞函數和傳遞View對象。
1傳遞函數
該方法:需要三步。
1、重寫ViewModel的構造函數
public ProduceCloud_ViewModel(Action close) { this.close = close; }
2、View在新建ViewModel對象時,將View對象的Close方法傳遞給ViewModel。
public ProduceDsm_View() { InitializeComponent(); produceCloudViewModel = new ProduceCloud_ViewModel(this.Close); this.DataContext = produceCloudViewModel; }
3 當執行完某個操作需要關閉View時,調用該函數委托即可。
private void Act_OnClick(object obj) { //其他操作 this.close.Invoke(); }
2傳遞View對象
這個就簡單了。
1重寫ViewModel的構造函數
class MyViewModel { /// <summary> /// 添加Window屬性 /// </summary> private Window window { get; set; } /// <summary> /// 構造函數,接收window作為參數 /// </summary> public MyViewModel(object window) { this.window = (Window)window; } }
3新建ViewModel實例的時候,傳入View對象。
public MainWindow() { InitializeComponent(); this.DataContext = new MyViewModel(this); }
3需要的時候,就調用window的Close方法。
this.window.Close();