委托,事件。。。

  之前总是各种脑补,看了http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.htmlhttp://www.cnblogs.com/zhili/archive/2012/10/22/Delegate.html  这两篇博文,本以为自己懂了其中的意思,看着好像明白他们讲的东西,但是一到别人问起来却不知道怎么回答,囧了,别人写出来的东西还是别人的思想,与自己好像没有半毛钱的关系,所以,真正遇到问题的时候,用到委托,用到事件的时候才会对他们的理解更加深刻,不至于,别人问“什么时候用委托?” 自己只能傻眼以对。。。

 在我的项目中,自定义控件中定义了许多要用到的控件,比如下面这个控件BtnLists.

 

  这个自定义控件在MyControls类中

 

   控件是用来使用的,在主界面中需将上面的控件布局到主界面中,然后需要对控件进行处理,也就是单击不同的按钮要触发不同的事件。

 这个要怎样实现效果呢?首先我们知道BtnLists 被应用到主界面时已经是一个整体,如何区分且控制其中每个按钮所发生的事件呢? 我可以说,刚开始的时候,对这个问题我只能耸耸肩木?

 后面老大提了一句用委托,事件处理,哦?好像终于用到以前脑补的各种知识了,可是现在怎么就用不出来了呢?书呆子一个的我。。。

 立即看了下别人的例子,懂了,会模仿了。。。

 在BtnLists类中为控件定义一个事件。

 #region 登陆密码按钮的单击事件

        private void btnLogin_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            OnLoginClick(this, e);
        }
        public delegate void LoginClickHandler(object sender, RoutedEventArgs e);
        public event LoginClickHandler LoginClick;
        private void OnLoginClick(object sender, RoutedEventArgs e)//事件的注册
        {
            if (LoginClick != null)
            {
                LoginClick(this,e);
            }
        }
        #endregion

在主界面MainPage类中用到该BtnLists时,就会有这个事件

点击进去,你就可以再方法里写你想要的实现效果了

private void myBtnLists_LoginClick(object sender, RoutedEventArgs e)
        {
            Views.UserInfo.Login_Pwd lp = new Views.UserInfo.Login_Pwd();
            lp.Show();
        }

 刚开始想用到Login_Pwd 这个类时,要引用其程序集,然后就变成循环依赖了,囧,明显地处理不正确。。现在实现就不那么囧了,虽然有些还是做得很挫。。

 加深理解,灵活变通。嗯,现在是上班,在写博客,有点。。。。。。

作者:wj704    出处:http://www.cnblogs.com/wj204/   
原文地址:https://www.cnblogs.com/wj204/p/3476688.html