zoukankan      html  css  js  c++  java
  • 星空雅梦

    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.  
      }

    原理非常简单,就是在页面里面响应外部事件,进而跨页面修改控件或者做点其他事情,有什么不懂的地方,大家可以在下面留言。我看到了会回复
  • 相关阅读:
    Nginx学习总结(一)
    zabbix3.4.8配置自动发现主机并监控
    Windows server 2012/2016系统安装zabbix3.2客户端
    CentOS7.6系统安装zabbix3.4.8客户端
    一个小爬虫的整体解决方案
    如何通过一个立方体搭建一栋楼
    用Scrapy框架开发的一个爬虫项目
    寻找替代imagemin更好的插件
    原生和es6复杂数组去重的方法
    javascript关于对象或者数组深克隆的写法
  • 原文地址:https://www.cnblogs.com/LiZhongZhongY/p/10884916.html
Copyright © 2011-2022 走看看