利用委托,将值/对象从自定义控件传递至主页面
一直不懂委托、事件是如何实现的。
觉得好像是要自己实现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; //赋值 }