当前位置: 首页 > article >正文

wpf中EventHandler的使用

应用情景:比如点击A界面的a按钮,跳转到B界面了,点击b按钮后,触发了业务逻辑,然后需要回到A界面中执行某一个方法。不是唯一的方法,可以使用别的方法,类似观察者模式,有变化了,就会改变。也可以理解一个界面向另一个界面发送消息。

1.建立一个wpf程序,分别增加上述的界面和按钮以及逻辑,文件预览

2.建立Common类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EventHandlerWPF
{public static class Common{/// <summary>/// 定义事件/// </summary>public static event EventHandler bChangedEvent;    //使用的地方注册事件public static void B()    //B方法,别的调用{bChangedEvent?.Invoke(null, EventArgs.Empty);   //只要此方法bChangedEvent注册了后,就会触发}}
}

3.MainWindow.xaml.cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace EventHandlerWPF
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();Common.bChangedEvent += Common_bChangedEvent;     //必须注册}private void Button_Click(object sender, RoutedEventArgs e){Window1 b = new Window1();b.ShowDialog();}private void Common_bChangedEvent(object sender, EventArgs e){    //点击B界面的b按钮后,这里首先触发。A();//业务处理}private void A(){MessageBox.Show("我是A");   //业务处理}}
}

4.Window1.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;namespace EventHandlerWPF
{/// <summary>/// Window1.xaml 的交互逻辑/// </summary>public partial class Window1 : Window{public Window1(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){MessageBox.Show("我是B");   //业务处理Common.B();       //需要向A界面传递值}}
}

5.效果,可见,点击B界面的b按钮,进入了A界面的a方法中

拓展

解析wpf中事件的object和EventArgs

此问题接着上面来说,如果要向事件里面传递参数,要向“真正”的事件那样做,应该如何做呢?其实在winform中也有事件,这个方法不仅WPF可以使用,winform也可以事件,其实都是.net的底层机制构造。

1.项目文件预览

2.Common.cs类

这里还可以使用string,传递一个string或者其他泛型,然后下面去接收,就不用谢继承了。

  public static event EventHandler<string> bChangedEvent;    //使用的地方注册事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EventHandlerWPF
{public static class Common{/// <summary>/// 定义事件/// </summary>public static event EventHandler bChangedEvent;    //使用的地方注册事件public static void B(object sender, B_EventArgs b_EventArgs)    //B方法,别的调用{//补充:事件的参数是object sender, EventArgs e  ,sender就是一个object类型,如果是按钮触发的,就是按钮的本身。bChangedEvent?.Invoke(sender, b_EventArgs);   //只要此方法bChangedEvent注册了后,就会触发}}public class B_EventArgs : EventArgs  //定义EventArgs的参数{public string Name { get; set; }public object obj { get; set; }}}

3.MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace EventHandlerWPF
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();Common.bChangedEvent += Common_bChangedEvent;     //必须注册}private void Button_Click(object sender, RoutedEventArgs e){Window1 b = new Window1();b.ShowDialog();}private void Common_bChangedEvent(object sender, EventArgs e){    //点击B界面的b按钮后,这里首先触发。var btn = sender as Button;string name = (e as B_EventArgs).Name; //接收事件的参数object obj = (e as B_EventArgs).obj;A();//业务处理}private void A(){MessageBox.Show("我是A");   //业务处理}}
}

4.Window1.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;namespace EventHandlerWPF
{/// <summary>/// Window1.xaml 的交互逻辑/// </summary>public partial class Window1 : Window{public Window1(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){MessageBox.Show("我是B");   //业务处理B_EventArgs b_EventArgs = new B_EventArgs();b_EventArgs.Name = "张三";b_EventArgs.obj = "真香";Common.B(b,b_EventArgs);       //需要向A界面传递值      这里的b就是界面b按钮的名字       }}
}

5.效果

调试的时候,在A界面中,可以看到对应的值

来源:wpf中EventHandler的使用_wpf eventhandler-CSDN博客

http://www.lryc.cn/news/2417338.html

相关文章:

  • 2023-05-31【05】Windows 10安装Oracle10g客户端
  • U盘文件系统FAT32、exFAT、NTFS之间有什么区别?
  • 解决 Linux 桌面问题思路分享
  • 自动化无人值守网络装机(PXE网络装机)
  • SERVER-U搭建
  • Android SDK下载安装及配置
  • [嵌入式系统-72]:ARM芯片选型基础
  • Windows Server 2008 R2安装IIS
  • 我的Delphi7里程碑(认识Delphi7的基本类型)
  • 2024年如何解决企业IM即时通讯的发展瓶颈?企业应如何选择适合自己的企业聊天软件?
  • Oracle优化器介绍(RBO/CBO)和用法
  • 对ArrayList集合中的元素进行排序
  • java 乱写4 异常常常常
  • (linux)中文显示乱码问题解决方法(编码查看及转换)
  • 电脑常识——host文件修改(屏蔽网站或解开屏蔽)
  • Java 8 的 Nashorn 脚本引擎教程
  • 串行通信接口详细描述
  • APUE学习之socket网络编程
  • [JavaScript]如何将www.xxx.com变为com.xxx.www
  • Serialization全解析
  • 手把手教你ubuntu下移植MJPG-streamer
  • 软件的三层架构
  • php pathinfo 什么用,在php中pathinfo函数起什么作用呢?
  • 使用Flurl轻松构建URL并在.NET中进行可测试的HttpClient调用
  • 单点登录实现的几种方式及原理【单点登录】
  • FTP客户端和服务器的设计与实现(C#)
  • 超详细双系统安装指南
  • IGBT驱动及保护电路(之一)
  • MemoryStream有关内存数据的读写
  • cpio文件的压缩与解压缩