1. 程式人生 > >WPF通過委託跨頁面修改介面控制元件,並傳值原理完全解析

WPF通過委託跨頁面修改介面控制元件,並傳值原理完全解析

網上有很多講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;
        }
    }

原理非常簡單,就是在頁面裡面響應外部事件,進而跨頁面修改控制元件或者做點其他事情,有什麼不懂的地方,大家可以在下面留言。我看到了會回覆