WPF通過委託跨頁面修改介面控制元件,並傳值原理完全解析
阿新 • • 發佈:2019-02-03
網上有很多講WPF修改控制元件的,但是大部分都只是程式碼佔據了很大的篇幅,沒有詳細講解過程。所以有了我這篇文章。我希望每一個看到這篇文章的朋友都可以看懂,另外不要被太長的標題嚇到。
通過委託跨頁面修改控制元件,所謂的原理就是,構造一個可以觸發事件A的靜態類,然後對頁面做出修改的事件B繫結事件A,然後當事件A被觸發後,頁面裡繫結的事件B也被觸發響應,於是對頁面做出修改。
下面這個圖,就是對靜態類中的事件A如何觸發頁面中的事件B,進而跨頁面修改介面進行說明的
看了上圖想必大家已經明白了。另外進一步的加深瞭解可以看我自己一個小專案裡面的程式碼。
public enum MainPage//切換頁面對應的列舉型別 { PageMain = 1, PageAdmin, } public class PageChangeArgs : EventArgs//委託引數 { private MainPage _currentPage;//這條欄位必不可少,因為在建構函式初始化時,屬性可能還沒有初始化完成,進而造成不可預計的損失 public PageChangeArgs(MainPage page) { this._currentPage = page; } public MainPage CurrentPage//這個屬性就是用來在委託間傳遞資料的 { get { return _currentPage; } set { _currentPage = value; } } } public static class MainWindowsChange { public static event EventHandler<PageChangeArgs> pageChangeEvent;//定義在MainWindowsChange中的一個事件,引數是PageChangeArgs物件 public static void PageChange(MainPage pageValue) { var pageChangeArgs = new PageChangeArgs(pageValue); if (pageChangeEvent != null)//如果MainWindowsChange建構函式中給pageChangeEvent註冊了函式就不為null { pageChangeEvent(null, pageChangeArgs);//觸發事件,執行所有註冊過的函式 } } }
下面是MainWindow裡面的程式碼
public partial class MainWindow : Window { Dictionary<MainPage, Page> pageList; public MainWindow() { InitializeComponent(); frameMain.Content = new PageMain(); pageList = new Dictionary<MainPage, Page> { { MainPage.PageMain, new PageMain() }, { MainPage.PageAdmin, new PageAdmin()}, }; MainWindowsChange.pageChangeEvent += ChangeFramePage; } public void ChangeFramePage(Object sender, PageChangeArgs page) { frameMain.Content = pageList.Single(h=> h.Key == page.CurrentPage).Value; } }
原理非常簡單,就是在頁面裡面響應外部事件,進而跨頁面修改控制元件或者做點其他事情,有什麼不懂的地方,大家可以在下面留言。我看到了會回覆