WPF:MVVM模式下ViewModel關閉View


不外乎兩種基本方法。

消息通知和參數傳遞。

一、消息通知

利用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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM