利用委托,将值/对象从自定义控件传递至主页面

本文通过网购场景,详细解析了委托和事件的工作原理。通过定义委托类型和事件,实现了控件选择值后的数据传递,展示了委托和事件在C#中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直不懂委托、事件是如何实现的。

觉得好像是要自己实现Button的各种事件(比如Click)一样高大上

偶然的看到一边文章,才对它们有了初步的了解。

 

此处,我要实现是,在点击自定义控件选中某一值后,隐藏控件,之后在主页面显示该值

这里就用双十一网购为例,来说说实现方法。买家、卖家、快递, 分别表示主页面、控件、委托。

卖家要将货物送给买家,就必须经过快递这个第三方。

所以得存在这个快递公司,于是定义一个委托:

public delegate void SendArgs(object sender, SendSelectItem args);  //定义一个委托,sender可以指快递公司, args就是要送的货物

货物可以只是简单的变量,也可以是自定义的类(比如包含订单,物品),但需要继承EventArgs类:

public class Item
{
  public string Order { set; get; } //订单号
  public string Article{ set; get; }   //物品
}

public class SendSelectItem:EventArgs   //要传的数据
{   public Item SelectedItem { get; set; }   public SendSelectItem(Item selectItem)   {   this.SelectedItem = selectItem;   } }

这样子, 快递公司就已经有了。

现在卖家(控件)那边就要开始通知快递公司,说要发货了。

public event SendArgs OnSend;  //定义事件

在要处理的时候

private void inView_Tapped(object sender, TappedRoutedEventArgs e)  //触发的时候开始提交快递
{
  ListView listView
= sender as ListView;  //取得快递,本身已经绑定数据   if (OnSend != null)
  {  
    OnSend(
this, new SendSelectItem((Item)listView.SelectedItem));
}

在卖家那边(主页面)中

ExpressSelect为自定义控件对象

ExpressSelect.OnSend+= ExpressSelect_OnSend;//事件

void ExpressSelect_OnSend(object sender, SendSelectItem e)
{
  this.SelectedItem =  e.SelectedItem;
  this.Code.Text = e.SelectedItem.Order;  //赋值
  this.Code.Tag = e.SelectedItem.Article;  //赋值
}

 

转载于:https://www.cnblogs.com/yffswyf/p/4094692.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值