zoukankan      html  css  js  c++  java
  • 利用委托,将值/对象从自定义控件传递至主页面

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

    觉得好像是要自己实现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;  //赋值
    }
  • 相关阅读:
    D
    pat 甲级 1003 Emergency(最短路计数)
    Goldbach
    pta 1148 Werewolf
    CodeForces
    pta 1144 The Missing Number
    2020团体程序设计天梯赛 L1-3 洛希极限
    2020团体程序设计天梯赛 L1-2 猫是液体
    2020团体程序设计天梯赛 L1-1 嫑废话上代码
    2020年团体程序设计天梯赛-题解
  • 原文地址:https://www.cnblogs.com/yffswyf/p/4094692.html
Copyright © 2011-2022 走看看