WPF通过委托跨页面修改界面控件,并传值原理完全解析(转)

时间:2024-02-19 18:42:09

WPF通过委托跨页面修改界面控件,并传值原理完全解析

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loongsking/article/details/54021194

网上有很多讲WPF修改控件的,但是大部分都只是代码占据了很大的篇幅,没有详细讲解过程。所以有了我这篇文章。我希望每一个看到这篇文章的朋友都可以看懂,另外不要被太长的标题吓到。

 

通过委托跨页面修改控件,所谓的原理就是,构造一个可以触发事件A的静态类,然后对页面做出修改的事件B绑定事件A,然后当事件A被触发后,页面里绑定的事件B也被触发响应,于是对页面做出修改。

 

下面这个图,就是对静态类中的事件A如何触发页面中的事件B,进而跨页面修改界面进行说明的

看了上图想必大家已经明白了。另外进一步的加深了解可以看我自己一个小项目里面的代码。

 

  1.  
    public enum MainPage//切换页面对应的枚举类型
  2.  
    {
  3.  
    PageMain = 1,
  4.  
    PageAdmin,
  5.  
    }
  6.  
    public class PageChangeArgs : EventArgs//委托参数
  7.  
    {
  8.  
    private MainPage _currentPage;//这条字段必不可少,因为在构造函数初始化时,属性可能还没有初始化完成,进而造成不可预计的损失
  9.  
    public PageChangeArgs(MainPage page)
  10.  
    {
  11.  
    this._currentPage = page;
  12.  
    }
  13.  
     
  14.  
    public MainPage CurrentPage//这个属性就是用来在委托间传递数据的
  15.  
    {
  16.  
    get { return _currentPage; }
  17.  
    set { _currentPage = value; }
  18.  
    }
  19.  
     
  20.  
    }
  21.  
    public static class MainWindowsChange
  22.  
    {
  23.  
    public static event EventHandler<PageChangeArgs> pageChangeEvent;//定义在MainWindowsChange中的一个事件,参数是PageChangeArgs对象
  24.  
     
  25.  
    public static void PageChange(MainPage pageValue)
  26.  
    {
  27.  
    var pageChangeArgs = new PageChangeArgs(pageValue);
  28.  
    if (pageChangeEvent != null)//如果MainWindowsChange构造函数中给pageChangeEvent注册了函数就不为null
  29.  
    {
  30.  
    pageChangeEvent(null, pageChangeArgs);//触发事件,执行所有注册过的函数
  31.  
    }
  32.  
    }
  33.  
    }


 

下面是MainWindow里面的代码

 

  1.  
    public partial class MainWindow : Window
  2.  
    {
  3.  
    Dictionary<MainPage, Page> pageList;
  4.  
    public MainWindow()
  5.  
    {
  6.  
    InitializeComponent();
  7.  
    frameMain.Content = new PageMain();
  8.  
     
  9.  
    pageList = new Dictionary<MainPage, Page>
  10.  
    {
  11.  
    { MainPage.PageMain, new PageMain() },
  12.  
    { MainPage.PageAdmin, new PageAdmin()},
  13.  
    };
  14.  
     
  15.  
    MainWindowsChange.pageChangeEvent += ChangeFramePage;
  16.  
    }
  17.  
    public void ChangeFramePage(Object sender, PageChangeArgs page)
  18.  
    {
  19.  
    frameMain.Content = pageList.Single(h=> h.Key == page.CurrentPage).Value;
  20.  
    }
  21.  
    }

原理非常简单,就是在页面里面响应外部事件,进而跨页面修改控件或者做点其他事情,有什么不懂的地方,大家可以在下面留言。我看到了会回复