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

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

觉得好像是要自己实现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;  //赋值
}

 

posted @ 2014-11-13 13:01  汪小饭  阅读(386)  评论(0编辑  收藏  举报