在開發(fā)WPF
應(yīng)用的時候采幌,經(jīng)常會碰到這樣的場景芳誓,點擊主窗口上的某個按鈕篡殷,將彈出一個子窗口衡便,在子窗口中有輸入框雨膨,輸入完成后支救,然后再點擊【確定】按鈕幢泼,將輸入框中的內(nèi)容傳遞到主窗口渡嚣。在iOS
開發(fā)渣淳,這個也很常見脾还,一般都是用delegate
或者block
進行回調(diào)。在WPF
中也是一樣的入愧,可以用委托進行回調(diào)鄙漏,從這可看出嗤谚,技術(shù)是相通的。下面來看下在WPF
中是怎么進行回調(diào)的怔蚌。
委托delegate
C#
中的Delegate
類似于C
或 C++
中函數(shù)的指針巩步。Delegate
是存有對某個方法的引用的一種引用類型變量。引用可在運行時被改變桦踊。Delegate
特別用于實現(xiàn)事件和回調(diào)方法椅野。所有的Delegate
都派生自 System.Delegate
類。申明一個delegate
如下所示:
public delegate void UpdateMainwindow(string Content);
事件event
delegate
一般和event
同時出現(xiàn)籍胯,通過事件來使用委托竟闪。創(chuàng)建一個event
如下所示:
public event UpdateMainwindow updateMainwindow;
調(diào)用委托
當(dāng)在子視圖點擊某個按鈕時,需要將一些信息傳遞到主界面時杖狼,需要在子視圖中調(diào)用事件炼蛤,如下所示:
private void Add_Button_Click(object sender, RoutedEventArgs e)
{
if (updateMainwindow != null)
{
updateMainwindow("WinAddPlaneLine");
}
this.Close();
}
然后在主視圖創(chuàng)建子窗口的時候,需要將子窗口的委托暴露給主窗口蝶涩,如下所示:
WinAddField winAddField = new WinAddField();
winAddField.updateMainwindow += SubWindow_updateMainwindow;
private void SubWindow_updateMainwindow(string Content)
{
Message.show(Content);
}
按以上步驟就可以完成數(shù)據(jù)回調(diào)了理朋,使用的是偽代碼,只是簡單的介紹下委托和事件怎么用來處理數(shù)據(jù)回調(diào)绿聘。
個人博客